【问题标题】:how to convert below Json To Java Pojo class?如何将下面的 Json 转换为 Java Pojo 类?
【发布时间】:2020-11-29 07:56:23
【问题描述】:

请在 Json 下方查看。我想把它转换成 POJO 类。

我已经尝试过以下课程

@Data
public class Root {
    @JsonProperty("0")      // Dont want to pass like this. it should be single list and index is the key of that array
    public List<Request> list;
    @JsonProperty("1")
    public List<Request> list1;
    @JsonProperty("2")
    public List<Request> list2;

    @Data
    private class Request {
        int id;
        String title;
        int level;
        List<Request> children;
        @JsonProperty("parent_id")
        int parentId;
    }
}
{
  "0": [
    {
      "id": 12123,
      "title": "sfsdf",
      "level": 0,
      "children": [
        
      ],
      "parent_id": null
    }
  ],
  "1": [
    {
      "id": 213,
      "title": "d",
      "level": 1,
      "children": [
        
      ],
      "parent_id": 1212312
    },
    {
      "id": 3232,
      "title": "dfsdf",
      "level": 1,
      "children": [
        
      ],
      "parent_id": 42
    },
    {
      "id": 234,
      "title": "tder",
      "level": 1,
      "children": [
        
      ],
      "parent_id": 122
    }
  ],
  "2": [
    {
      "id": 452,
      "title": "Blll",
      "level": 2,
      "children": [
        
      ],
      "parent_id": 322
    },
    {
      "id": 123,
      "title": "trrr",
      "level": 11,
      "children": [
        
      ],
      "parent_id": 1221
    },
    {
      "id": 33,
      "title": "sdfw",
      "level": 2123,
      "children": [
        
      ],
      "parent_id": 10
    }
  ]
}

【问题讨论】:

    标签: java json spring spring-boot


    【解决方案1】:

    使用@JsonAnySetter

    例如,为了简单起见,使用 public 字段:

    class Root {
        @JsonAnySetter
        public Map<String, List<Request>> lists = new LinkedHashMap<>();
    }
    
    class Request {
        public int id;
        public String title;
        public int level;
        public List<Request> children;
        @JsonProperty("parent_id")
        public Integer parentId; // 'Integer', not 'int', since it can be null
    }
    

    测试

    ObjectMapper mapper = new ObjectMapper();
    Root root = mapper.readValue(new File("test.json"), Root.class);
    for (Entry<String, List<Request>> entry : root.lists.entrySet()) {
        System.out.println(entry.getKey() + ":");
        for (Request request : entry.getValue()) {
            System.out.println("  id=" + request.id +
                            ", title=" + request.title +
                            ", level=" + request.level +
                         ", children=" + request.children +
                         ", parentId=" + request.parentId);
        }
    }
    

    输出

    0:
      id=12123, title=sfsdf, level=0, children=[], parentId=null
    1:
      id=213, title=d, level=1, children=[], parentId=1212312
      id=3232, title=dfsdf, level=1, children=[], parentId=42
      id=234, title=tder, level=1, children=[], parentId=122
    2:
      id=452, title=Blll, level=2, children=[], parentId=322
      id=123, title=trrr, level=11, children=[], parentId=1221
      id=33, title=sdfw, level=2123, children=[], parentId=10
    

    【讨论】:

      【解决方案2】:

      只需删除第二个和第三个列表。只保留一个列表,让它保留它的名字,比如listrequests。然后添加到该列表中。

      Root root = new Root(); // whatever
      root.getRequests().add(myFirstRequest); // index 0 in the array
      root.getRequests().add(mySecondRequest); // index 1 in the array
      root.getRequests().add(myThirdRequest); // index 2 in the array
      
      String json = // however you were making json out of Root before
      

      【讨论】:

      • 我想将这个 Root 对象传递给请求正文中的其余控制器。
      【解决方案3】:

      通过在控制器请求正文中传递Map&lt;String, List&lt;Request&gt;&gt; lists。我的问题已经解决了。我得到了预期的 JSON。

      【讨论】:

        猜你喜欢
        • 2019-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-20
        相关资源
        最近更新 更多