我想在java中反序列化JSON主体,其中一个字段可能有多个dataType和不同的字段。
例如:
第1种变体
{
"errorMessage": " Task timed out after 60.04 seconds"
}
第二种变体
{
"errorType": "Runtime.ExitError",
"errorMessage": "RequestId: xyz Error: Runtime exited with error: signal: aborted"
}
第3种变体
"errorMessage": {
"code": 502,
"message": "Failed to read object from S3: abcd9.json with error message: NoSuchBucket: The specified bucket does not exist"
},
"errorType": "Error",
我搞不清楚如何设计一个pojo或数据模型来处理这个问题和反序列化。
如果是第三种类型的JSON,我想访问类中的代码和消息。
我试图创建一个定制的Deserializer,但没有成功。
2条答案
按热度按时间k5ifujac1#
通常这些东西都有一个结构和模式,你不需要每个变体都有Pojo,但你的例子对我来说似乎很不对劲,你确定这正是你收到的吗?
通常,您的变体可以使用如下内容来涵盖。
或
用途:
fumotvh32#
我建议将其序列化为Map<String,Object>,它总是可以工作的,但是你必须分析你的map,看看它的结构是什么。
您可以直接使用JsonJackson库,并使用类
ObjectMapper
来执行此操作。你也可以使用JsonUtils
类,它是ObjectMapper
类的一个精简 Package 器,允许你在一行中完成简单的序列化/反序列化。下面是一个例子:JsonUtils
类是由我编写和维护的开源MgntUtils java库的一部分。这里是JsonUtils Javadoc,库可以作为maven artifact或从github获得(包括源代码和Javadoc)