2016-04-23 6 views
0

Die Frage ist also, wie man richtig POJO für JSON zu bauen, die wie folgt aussehen:Proper POJO für die Serialisierung JSON mit Jackson Bibliothek

{"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"}} 

Das Problem ist, dass ich kippe JSON analysieren wie in Google Developers docs gezeigt, weil dort ist viele verschiedene Namen für ein Array, das die Daten enthält, die ich brauche.

+0

Haben Sie Kommas in Ihrem json nach jedem Element oder ist es genau wie Sie in Ihrer Frage zeigen? Weil Sie uns zeigen, dass JSON – varren

Antwort

1

Sie könnten es versuchen, wie dieser (Spoiler viel Code)

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(); 
     } 
    } 
} 

Abhängigkeiten zu analysieren:

com.fasterxml.jackson.core jackson-core

com.fasterxml.jackson.core jacks on-Annotationen

com.fasterxml.jackson.core jackson-databind

0

Ich würde vorschlagen, Ihre Json zu so etwas wie diese Einstellung:

[{“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

ungültig ist, kann ich JSON nicht anpassen, weil ich es von einer API bekomme, auf die ich keinen Einfluss habe = ( –

Verwandte Themen