以下是示例JSON字符串。我想解析这个嵌套的JSON对象,即使嵌套的对象具有相同的名称。有时,我们可能会有多个级别的嵌套对象。我厌倦了Jackson的嵌套对象解析,但这对我不起作用。在解析对象之后,我想把它转换成一个不同的format.Please来帮助我解析这个JSON。提前谢谢。
{
"operator": "and",
"predicates": [
{
"operator": "and",
"predicates": [
{
"columnName": "userName",
"datatype": "string",
"input": "text",
"operand": "equal",
"value": "xxxx"
},
{
"columnName": "Age",
"datatype": "number",
"input": "number",
"operand": "greater_or_equal",
"value": "21"
}
]
},
{
"operator": "and",
"predicates": [
{
"columnName": "userName",
"datatype": "string",
"input": "text",
"operand": "not_equal",
"value": "nnn"
},
{
"columnName": "Birthday",
"datatype": "date",
"input": "date_picker",
"operand": "in",
"value": "2020-07-23,2020-07-24"
}
]
}
]
}下面是用java编写的代码
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Predicates {
private String columnName;
private String datatype;
private String input;
private String operator;
private String value;
private String operand;
/**
*
*/
private List<Predicates> predicates;
@JsonProperty("predicates")
private void unpackNested(Map<String,Object> predicates) {
this.columnName = (String)predicates.get("columnName");
this.datatype = (String)predicates.get("datatype");
this.input = (String)predicates.get("input");
this.operator = (String)predicates.get("operator");
this.value = (String)predicates.get("value");
this.operand = (String)predicates.get("operand");
}
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String getDatatype() {
return datatype;
}
public void setDatatype(String datatype) {
this.datatype = datatype;
}
public String getInput() {
return input;
}
public void setInput(String input) {
this.input = input;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getOperand() {
return operand;
}
public void setOperand(String operand) {
this.operand = operand;
}
public List<Predicates> getPredicates() {
return predicates;
}
public void setPredicates(List<Predicates> predicates) {
this.predicates = predicates;
}
}解析
ObjectMapper mapper = new ObjectMapper();
Predicates pr = mapper.readValue(json, Predicates.class);发布于 2020-09-30 02:19:41
我不知道您的unpackNested方法想要达到什么目的。Jackson已经可以将属性从JSON绑定到对象,并且可以很好地处理递归属性。
我只是删除了您的unpackNested方法,并在您提供的输入上运行了您的代码:
ObjectMapper mapper = new ObjectMapper();
Predicates pr = mapper.readValue(json, Predicates.class);对象pr包含完整的json,包括嵌套的子谓词。(我用jackson databind 2.11.2运行了代码)。
如果未自动检测到您的属性,请使用@JsonProperty注释您的getters
class Predicate {
// ..snip..
@JsonProperty("input")
public String getInput() {
return input;
}
@JsonProperty("predicates")
public List<Predicates> getPredicates() {
return predicates;
}
}但除此之外,不需要采取额外的步骤。Jackson已经可以解包嵌套的对象了,只需移除你的(奇怪的) unpackNested方法,让Jackson来做它的工作。
https://stackoverflow.com/questions/63442081
复制相似问题