如何映射JSON(自定义)

时间:2017-07-18 17:50:39

标签: java json jackson

我是初学者,我需要从JSON中进行排序,以便稍后进行分析。 我需要知道JSON字段以及它是否有数组或子类别。 我必须映射JSON输入,例如:

{  
   "car":"Audi",
   "model":"2010",
   "price":"30000",
   "colors":[  
      "Grey",
      "White",
      "Black"
   ],
   "otro":{  
      "a":1,
      "b":2,
      "c":[  
         {  
            "c11":"c11",
            "c12":"c12"
         },
         {  
            "c21":"c21",
            "c22":"c22"
         }
      ]
   }
}

等待输出映射:

car
model
price
colors[]
otro.a
otro.b
otro.c[].c11
otro.c[].c12
otro.c[].c21
otro.c[].c22

这是我的代码:

public static void main(String[] args) {

    try {

        ObjectMapper mapper = new ObjectMapper();
        String json = "{\"car\":\"Audi\",\"model\":\"2010\",\"price\":\"30000\",\"colors\":[\"Grey\",\"White\",\"Black\"],\"otro\":{\"a\":1,\"b\":2,\"c\":[{\"c11\":\"c11\", \"c12\":\"c12\"},{\"c21\":\"c21\", \"c22\":\"c22\"}]}}";

        Map<String, Object> map = new HashMap<String, Object>();

        // convert JSON string to Map
        map = mapper.readValue(json, new TypeReference<Map<String, Object>>() {
        });

        for (Map.Entry<String, Object> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue().getClass());
            if (entry.getValue() instanceof List) {
                for (Object object : ((List)entry.getValue())) {
                    System.out.println("\t-- " + object.getClass());
                }
            }

        }

    } catch (JsonGenerationException e) {
        e.printStackTrace();
    } catch (JsonMappingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:0)

你可以制作一个POJO并将JSON映射到POJO并随意做任何事情。另一个非常强大的选项是使用JsonNode对象。他们有很多辅助方法来确定每个节点的类型。以下是一些简短示例https://www.stubbornjava.com/posts/practical-jackson-objectmapper-configuration#jsonnodes-and-nested-objects