【发布时间】:2018-09-25 09:07:31
【问题描述】:
我有一个复杂/嵌套的 json。我的 json 文件由两个等效的 java 对象组成。一个是Complex_Expression,另一个是Simple_Expression。
Complex_Expression 格式如下:
{
"SomeOpearator":0,
"ASpecificKey":1, //the value 1 is fixed for complex expression.
"Expressions":[ ] //array of one or more expressions
}
Simple Expression 格式如下:
{
"Operand":"Some String Value",
"ASpecificKey":0, //the value 0 is fixed for simple expressions.
"SomeComparisionOpearator":1, // enums which associates int to different comparison operators.
"Value":["String1"] //this is an array of strings.
}
Expressions 又可以有Complex_Expression 和/或Simple_Expression。 json 文件总是从Complex_Expression 开始。我必须反序列化这个 JSON 文件。我的最终目标是使用Complex_Expression 和Simple_Expression 对象以及这些类中的一些逻辑来制作表达式。我不介意使用 jackson 或 gson 或其他依赖项。
到目前为止,我已经创建了一个名为Expression 的基类。 Complex_Expression 和 Simple_Expression 都继承了这个类。然后我开始写Custom Json Deserializer。但是在自定义反序列化器中,我被卡住了,我不知道该怎么做。请帮助我。我的Simple_Expression 类看起来像这样,与Complex_Expression 类有些相似。
public class Simple_Expression extends Expression
{
@JsonProperty("Operand") //use jackson deserializer for this class.
public String Operand;
@JsonProperty("SomeComparisionOpearator")
public SomeComparisionOpearator someCompareOperator;
@JsonProperty("Value")
public Object value;
public Simple_Expression()
{
super(ASpecificKey.Simple); //Simple corresponds to 0
}
}
更新
关于我的输入和输出的更多描述。输入给定一个 JSON 字符串,如下所示:
{
"SomeOpearator": 0,
"ASpecificKey": 1,
"Expressions": [
{
"SomeOpearator": 1,
"ASpecificKey": 1,
"Expressions": [
{
"Operand": "People",
"ASpecificKey": 0,
"SomeComparisionOpearator": 14,
"Value": [
"Rich"
]
}
]
},
{
"SomeOpearator": 1,
"ASpecificKey": 1,
"Expressions": [
{
"Operand": "Grade",
"ASpecificKey": 0,
"SomeComparisionOpearator": 2,
"Value": [
"Grade A"
]
}
]
}
]
}
假设杰克逊反序列化器,我应该能够做这样的事情:
ObjectMapper mapper = new ObjectMapper();
Expression myExpressionObject = mapper.convertValue(jsonString, Expression.class);
它应该将反序列化的对象放入 myExpressionObject 中,该对象将包含一个表达式列表(Arraylist 或 Array,没问题)。
【问题讨论】:
-
你应该分享你的java代码和序列化/反序列化的预期输入/输出数据示例
标签: java json jackson gson json-deserialization