使用Jackson解析复杂的JSON对象列表

迈克尔·A

我有一个类似JSON对象的列表:

[
  {
    "id": "A",
    "objs": [
      { "obj1": 1 },
      { "obj2": 0 },
    ]
  },
  {
    "id": "A",
    "objs": [
      { "obj1": 1 },
      { "obj2": 0 },
    ]
  }
]

并希望将它们加载到MyObj列表中:

class MyObj {
  private final String id;
  private final HashMap<String, Integer> objs;

  // Constructors, etc. here...
}

ArrayList<MyObj> list;

是否有任何聪明的方法使用Jackson ObjectMapper或其他绑定来执行此操作?即,以最少的样板代码?没有HashMap,这将是一个简单的问题:

list = mapper.readValue(file, new TypeReference<ArrayList<MyOBJ>>() {});

但是HashMap似乎可以杀死它。有想法吗?

0xFF

首先,您需要一个用于JSON的模型类。然后,您应该编写自己的解析器,以将数据读取到数组(Map,List等)。杰克逊

我的旧项目中的一个小例子。

型号类别:

package ru.model;

import javax.persistence.*;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Entry implements Serializable {
    private static final long serialVersionID = 8201337883209943936L;

    private Integer primary_id;
    private Integer id;
    private String description;
    private Integer votes;
    private String author;
    private Date date;
    private String gifURL;
    private String previewURL;
    private String embedId;
    private String type;

//  getters and setters
}

解析器示例:

public static List<Entry> getAllEntries(String jsonString) {        
    List<Entry> entries = new ArrayList<Entry>();                               
        try {
            if (jsonString.length() == 0) {
                throw new Exception("Empty json!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        ObjectMapper objectMapper = new ObjectMapper();

        try {
            JsonNode rootNode = objectMapper.readTree(jsonString);
            JsonNode resultNode = rootNode.findPath("result"); // choose concrete element in JSON array
            if (resultNode.size() > 0) {
                for (int i = 0; i < resultNode.size(); i++) {
                    entries.add(objectMapper.readValue(resultNode.get(i).toString(), Entry.class));
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    return entries;
}

JSON的示例:

{"result":
[
{"id":94,
"description":"description111",
"votes":1,
"author":"sashvd",
"date":"Mar 15, 2013 4:09:03 PM",
"gifURL":"http://-..",
"previewURL":"http://.."}
],
"totalCount":88}
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档