【问题标题】:Convert JSON data to a list of Java objects将 JSON 数据转换为 Java 对象列表
【发布时间】:2014-03-24 17:58:52
【问题描述】:

我有这样的 JSON 数据:

[ {
    "data": "data",
    "what": "what2",
    "when": 1392046352,
    "id": 13,
    "tags": "checkid:testcheckid, target:server.id.test, id:testid"
}, {
    "data": "Test",
    "what": "Test",
    "when": 1395350977,
    "id": 5,
    "tags": "checkid:testcheckid, target:server.id.test, id:testid"
} ]

我有一个 Java 类,我想将此 JSON 转换为我的类的实例列表。我找到了如何转换单个对象,而不是列表。

【问题讨论】:

    标签: java json list serialization converter


    【解决方案1】:

    使用Jackson,您可以执行以下操作:

    String jsonStr = "...";
    ObjectReader reader = new ObjectMapper().reader();
    List<Map<String, Object>> objs = reader.readValue(jsonStr);
    
    Map<String, Object> myFirstObj = objs.get(0);
    myFirstObj.get("data");
    myFirstObj.get("what");
    // and so on
    

    或者更好的是,您可以创建一个 pojo 并执行以下操作:

    String jsonStr = "...";
    ObjectMapper mapper = new ObjectMapper();
    List<MyPojo> myObjs = mapper.readValue(jsonStr, new TypeReference<List<MyPojo>>() {});
    MyPojo myPojo = myObjs.get(0);
    myPojo.getData();
    myPojo.getWhat();
    // and so on
    

    【讨论】:

    • 如果值可以是任何值,最好使用JsonNode
    • 在地图中?
    • 不,如JsonNode ;) 它可以建模任何 JSON 值
    • 在 hedi691 的情况下,我们想要 ArrayNode?我使用过杰克逊,但没有使用过“节点”对象。这样做有什么好处吗?
    • 如果他有 POJO,没有。如果是直接操作JSON,是的。毕竟.get() 方法是在JsonNode 上定义的(还要注意.path() 方法)
    【解决方案2】:

    有几个库可以解析 JSON,例如 GSon 和 Jackson。如果没有提供开箱即用的功能,您可以编写一个自定义反序列化程序来满足您的需求。

    【讨论】:

      【解决方案3】:

      我不太明白你的问题,如果你已经有了对象,只需创建一个列表(例如 ArrayList)并添加它们。

      ArrayList<YourObject> list = new ArrayList<YourObject>();
      list.add(yourObject);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-13
        • 1970-01-01
        • 1970-01-01
        • 2018-10-14
        • 2013-02-16
        • 1970-01-01
        • 2016-10-06
        相关资源
        最近更新 更多