首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中解析嵌套的JSON对象

如何在java中解析嵌套的JSON对象
EN

Stack Overflow用户
提问于 2020-08-17 05:25:11
回答 1查看 514关注 0票数 0

以下是示例JSON字符串。我想解析这个嵌套的JSON对象,即使嵌套的对象具有相同的名称。有时,我们可能会有多个级别的嵌套对象。我厌倦了Jackson的嵌套对象解析,但这对我不起作用。在解析对象之后,我想把它转换成一个不同的format.Please来帮助我解析这个JSON。提前谢谢。

代码语言:javascript
复制
 {
      "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编写的代码

代码语言:javascript
复制
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;
    }
}

解析

代码语言:javascript
复制
ObjectMapper mapper = new ObjectMapper();
Predicates pr = mapper.readValue(json, Predicates.class);
EN

回答 1

Stack Overflow用户

发布于 2020-09-30 02:19:41

我不知道您的unpackNested方法想要达到什么目的。Jackson已经可以将属性从JSON绑定到对象,并且可以很好地处理递归属性。

我只是删除了您的unpackNested方法,并在您提供的输入上运行了您的代码:

代码语言:javascript
复制
ObjectMapper mapper = new ObjectMapper();
Predicates pr = mapper.readValue(json, Predicates.class);

对象pr包含完整的json,包括嵌套的子谓词。(我用jackson databind 2.11.2运行了代码)。

如果未自动检测到您的属性,请使用@JsonProperty注释您的getters

代码语言:javascript
复制
class Predicate {
  // ..snip..

  @JsonProperty("input")
  public String getInput() {
    return input;
  }

  @JsonProperty("predicates")
  public List<Predicates> getPredicates() {
    return predicates;
  }
}

但除此之外,不需要采取额外的步骤。Jackson已经可以解包嵌套的对象了,只需移除你的(奇怪的) unpackNested方法,让Jackson来做它的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63442081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档