2016-04-23 69 views
0

所以现在的问题是如何正确地构建POJO的JSON看起来像这样:正确的POJO与杰克逊库序列化JSON

{"1":{ 
     "value_1":"something", 
     "value_2":"something else"}, 
"2": { 
     "value_1":"something", 
     "value_2":"something else"}, 
"3": { 
     "value_1":"something", 
     "value_2":"something else"}, 

    ... 

"999": { 
     "value_1":"something", 
     "value_2":"something else"}} 

的问题是,我不能解析JSON如图Google Developers docs因为到许多不同的名称,以保存我需要的数据。

+0

你有你的JSON逗号每个元素之后,或者是它就像你在你的问题说明了什么?因为你向我们展示无效的json – varren

回答

1

你可以尝试解析像这样(扰流大量的代码)

public class ParseTo { 

    private Map<String, InnerParse> unknown = new HashMap<>(); 

    @JsonAnyGetter 
    public Map<String, InnerParse> get(){ 
     return unknown; 
    } 

    @JsonAnySetter 
    public void set(String key, Object value){ 
     if(value instanceof Map){ 
      Map<String, String> m = (Map<String, String>) value; 
      unknown.put(key, new InnerParse(m)); 
     } 
    } 
} 

public class InnerParse { 

    private static final String V1_PROPERTY = "value_1"; 
    private static final String V2_PROPERTY = "value_2"; 

    public InnerParse(Map<String, String> map){ 
     this.value1 = map.get(V1_PROPERTY); 
     this.value2 = map.get(V2_PROPERTY); 
    } 

    private String value1; 
    private String value2; 

    public String getValue1() { 
     return value1; 
    } 

    public void setValue1(String value1) { 
     this.value1 = value1; 
    } 

    public String getValue2() { 
     return value2; 
    } 

    public void setValue2(String value2) { 
     this.value2 = value2; 
    } 
} 

public class Main { 

    public static void main(String[] args) { 
     String jsonString = "{\"1\":{\n" + 
      "  \"value_1\":\"something\",\n" + 
      "  \"value_2\":\"something else\"},\n" + 
      " \"2\": {\n" + 
      "  \"value_1\":\"something\",\n" + 
      "  \"value_2\":\"something else\"}" + 
      "}"; 
     try { 
      ParseTo parsed = new ObjectMapper().readValue(jsonString, ParseTo.class); 

      parsed.get().entrySet().stream() 
       .forEach(entry -> { 
        System.out.println("key: " + entry.getKey() + ", value: (" + 
         " Inner value1: " + entry.getValue().getValue1() + "," + 
         " Inner value2: " + entry.getValue().getValue2() + 
         ")"); 
       }); 

     } catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 

依赖关系:

com.fasterxml.jackson.core jackson-core

com.fasterxml.jackson.core jacks上标注

com.fasterxml.jackson.core杰克逊,数据绑定

0

我会建议您调整JSON来是这样的:

[{“id”: 1, “values”: [{“value”: 1, “text”: “something”}, {“value”: 2, “text”: “something else”}]}, 
{“id”: 2, “values”: [{“value”: 1, “text”: “something”}, {“value”: 2, “text”: “something else”}]}, 
{“id”: 3, “values”: [{“value”: 1, “text”: “something”}, {“value”: 2, “text”: “something else”}]}, 
… 
{“id”: 999, “values”: [{“value”: 1, “text”: “something”}, {“value”: 2, “text”: “something else”}]}] 
+0

事情是我无法调整JSON,因为我从api中得到它,我对它没有影响=( –