代码之家  ›  专栏  ›  技术社区  ›  Mirjalal Edwin Dalorzo

如何使用Jackson从json对象反序列化对象数组

  •  0
  • Mirjalal Edwin Dalorzo  · 技术社区  · 6 年前

    我正在尝试使用Jackson库反序列化以下JSON。这个JSON与中提到的非常相似 this question 如何反序列化以下JSON?

    {
      "A": [
        {
          "id": 16,
          "logo": "QJQSZzbXurElfHYcq6hcbPuaWKVfQU31lx2eSIIr.png",
        },
        {
          "id": 20,
          "logo": "AizaZzbXurElfHYcq6PuaWKV2761lx2eSLESASFr.png",
        }
      ],
      "B": [
        {
          "id": 42,
          "logo": "tBYhHGTNTCYT60RZJydMyGgg47Tla36ISuRj4p0e.png",
        },
        {
          "id": 44,
          "logo": "kCZveUWo9eqIZc25deE4ln8llxlbBviRolk4PsCm.png",
        }
      ]
    }
    

    这里是 MonthTree 班级:

    public class MonthTree {
        private int id;
        private String logo;
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
    
        public String getLogo() {
            return logo;
        }
        public void setLogo(String logo) {
            this.logo = logo;
        }
    }
    

    但是,我尝试获取数组名称的列表/数组( A B id logo 但我失败了。以下是我试图做的:

    ObjectMapper mapper = new ObjectMapper();
    List<MonthTree> monthTrees = mapper.readValue(json_res, new TypeReference<List<MonthTree>>(){});
    

    所以,我得到了以下例外:

    无法反序列化的实例 com.talmir.myApp.utils.MonthTree[] 启动外对象令牌

    1 回复  |  直到 6 年前
        1
  •  1
  •   Bruno Carletti Vivek    6 年前

    你可以这样做:

    public class MonthTree {
    
        private int id;
        private String logo;
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
    
        public String getLogo() {
            return logo;
        }
        public void setLogo(String logo) {
            this.logo = logo;
        }
        @Override
        public String toString() {
            return "MonthTree [id=" + id + ", logo=" + logo + "]";
        }
    
        public static void main(String[] args) {
            String json = "{\n" + 
                    "  \"A\": [\n" + 
                    "    {\n" + 
                    "      \"id\": 16,\n" + 
                    "      \"logo\": \"QJQSZzbXurElfHYcq6hcbPuaWKVfQU31lx2eSIIr.png\"\n" + 
                    "    },\n" + 
                    "    {\n" + 
                    "      \"id\": 20,\n" + 
                    "      \"logo\": \"AizaZzbXurElfHYcq6PuaWKV2761lx2eSLESASFr.png\"\n" + 
                    "    }\n" + 
                    "  ],\n" + 
                    "  \"B\": [\n" + 
                    "    {\n" + 
                    "      \"id\": 42,\n" + 
                    "      \"logo\": \"tBYhHGTNTCYT60RZJydMyGgg47Tla36ISuRj4p0e.png\"\n" + 
                    "    },\n" + 
                    "    {\n" + 
                    "      \"id\": 44,\n" + 
                    "      \"logo\": \"kCZveUWo9eqIZc25deE4ln8llxlbBviRolk4PsCm.png\"\n" + 
                    "    }\n" + 
                    "  ]\n" + 
                    "}";
    
            try {
                ObjectMapper mapper = new ObjectMapper();
                Map<String, List<MonthTree>> map = mapper.readValue(json, new TypeReference<Map<String, List<MonthTree>>>(){});
                Iterator<String> it = map.keySet().iterator();
                while (it.hasNext()) {
                    String letter = (String) it.next();
                    List<MonthTree> list = map.get(letter);
                    for (MonthTree monthTree : list) {
                        System.out.println("Letter: "+letter+" MonthTree: "+monthTree);
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
    }