2016-04-23 71 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中得到它,我對它沒有影響=( –