2016-04-03 7 views
1

Ich habe eine JSON-Zeichenfolge, die ich in eine HashMap analysieren möchte.Gson von JSON zu HashMap <Integer, MyObject> wobei Integer innerhalb des JSON-Objekts ist

Mein Objekt sieht wie folgt aus:

public class MyObject { 

private int id; 
private String text; 
} 

und die JSON-String sieht wie folgt aus:

objects:[ 
{"id":1, "text":"firsttext"}, 
{"id":2, "text":"secondtext"}, 
{"id":3, "text":"thirdtext"} 
] 

Wie würde ich mich über ordentlich dies in eine HashMap < Integer Parsen MyObject>, so dass Wenn ich HashMap.get (2) aufrufen würde, würde das zweite Objekt des Arrays, das "secondtext" enthält, zurückgeben?

Gerade jetzt, was ich tun ist

Type integerStringMap = new TypeToken<Map<Integer, MyObject>>(){}.getType(); 
HashMap<Integer, MyObject> objects = new Gson().fromJson(content, integerStringMap); 

Aber ich bin java.lang.NumberFormatException bekommen: Für Eingabestring: "id".

Ich fühle mich ziemlich ahnungslos, wie man das ohne Loops löst und ich hoffe wirklich, dass es einen clevereren Weg gibt, dies zu tun. Würde mich über jede Hilfe freuen!

EDIT: Hier ist ein Ausschnitt von Code, der tut, was ich will:

Type integerObjectList = new TypeToken<List<MyObject>>(){}.getType(); 

List<MyObject> cardList = new Gson().fromJson(jsonString, integerObjectList); 

HashMap<Integer, MyObject> cardMap = new HashMap<Integer, MyObject>(); 
for (MyObject o : objectList) { 
    objectMap.put(o.getId(), o); 
} 

ich würde, wenn möglich, möchte es ohne die for-Schleife zu tun.

+0

Werfen Sie einen Blick auf [diese] (http://www.leveluplunch.com/java/examples/convert-json-to-from-map-jackson/). –

Antwort

0

Der folgende Code arbeitete für mich. Vielleicht gibt es ein Problem bei der Erstellung des "Inhalts"?

Gson gson = new GsonBuilder().setPrettyPrinting().create(); 

     String jsonStr = "[{'id':1, 'text':'firsttext'}," + 
       "{'id':2, 'text':'secondtext'}," + 
       "{'id':3, 'text':'thirdtext'}]"; 

     Type integerStringMap = new TypeToken<Collection<MyObject>>(){}.getType(); 
     Collection<MyObject> enums = gson.fromJson(jsonStr, integerStringMap); 

     for(MyObject mo : enums){ 
      System.out.println(mo); 
     } 
+0

Ich glaube nicht, dass ich erklärt habe, was ich gut genug erreichen möchte. Ich habe meinen ursprünglichen Post bearbeitet, um zu zeigen, was ich gerne machen würde. –

Verwandte Themen