2012-04-25 14 views
22

chcę przekonwertować następujący ciąg JSON do obiektu Java:Jak przekonwertować następujący ciąg json na obiekt Java?

String jsonString = "{ 
"libraryname":"My Library", 
"mymusic":[{"Artist Name":"Aaron","Song Name":"Beautiful"}, 
{"Artist Name":"Britney","Song Name":"Oops I did It Again"}, 
{"Artist Name":"Britney","Song Name":"Stronger"}]}" 

moim celem jest dostęp do niego łatwo coś takiego:

(e.g. MyJsonObject myobj = new MyJsonObject(jsonString) 
myobj.myrows[0].id would give me the ID, myobj.libraryname gives me "My Library"). 

Słyszałem Jackson, ale jestem pewien, jak go użyć, aby dopasować ciąg jsonów, który mam, ponieważ nie jest to tylko para wartości klucza z powodu listy "mimuzyków". Jak mogę to osiągnąć z Jacksonem, czy jest jakiś prostszy sposób, w jaki mogę to osiągnąć, skoro Jackson nie jest najlepszy?

+0

możliwe duplikat [? przekonwertować ciąg JSON do obiektu w Java] (http://stackoverflow.com/questions/1395551/convert-a-json-string-to-object-in -java) – bummi

Odpowiedz

60

nie trzeba iść z GSON do tego przeznaczonych; Jackson może zrobić albo zwykły Mapy/list:

ObjectMapper mapper = new ObjectMapper(); 
Map<String,Object> map = mapper.readValue(json, Map.class); 

lub bardziej wygodne JSON Drzewo:

JsonNode rootNode = mapper.readTree(json); 

Nawiasem mówiąc, nie ma powodu, dlaczego nie można było faktycznie tworzenia klas Javy i zrobić to (IMO) wygodniej:

public class Library { 
    @JsonProperty("libraryname") 
    public String name; 

    @JsonProperty("mymusic") 
    public List<Song> songs; 
} 
public class Song { 
    @JsonProperty("Artist Name") public String artistName; 
    @JsonProperty("Song Name") public String songName; 
} 

Library lib = mapper.readValue(jsonString, Library.class); 
+0

Mam rozwiązanie z Twojego kodu. dzięki –

+0

Próbowałem wysłać ten ciąg jsonów z jacksonem, ale zwraca tylko wartości puste, '[{" id ": 62," name ":" projectname1 "," batchClassId ": 1283," batchClassName ":" sample_batchclass26 " "assetCount": 0}, {"id": 8, "name": "projectname_tmp", "batchClassId": 1283, "batchClassName": "sample_batchclass26", "assetCount": 0}] ' –

+0

To jest JSON Array, więc musi być związany z Java 'Collection' (jak' List') lub tablica (może używać typu 'Object []. Class'). Lub po prostu do 'java.lang.Object' (będzie typu' List'). Będzie działało dobrze. – StaxMan

0

Gson jest również dobre dla niego: http://code.google.com/p/google-gson/

" Gson jest biblioteką Java, który może być użyty do konwersji Java przedmiotów do ich reprezentacji JSON Może być również użyty do konwersji ciąg JSON do równoważnych Java. . celem Gson może pracować z dowolnymi obiektami Javy tym wcześniej istniejących obiektów, które nie posiadają kodu źródłowego z "

Sprawdź przykłady API. https://sites.google.com/site/gson/gson-user-guide#TOC-Overview Więcej przykładów: http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/

4

Wyjazd Google Gson: http://code.google.com/p/google-gson/

Z ich strony internetowej:

Gson gson = new Gson(); // Or use new GsonBuilder().create(); 
MyType target2 = gson.fromJson(json, MyType.class); // deserializes json into target2 

byłoby po prostu trzeba zrobić klasę MyType (nazwa zmieniona, oczywiście) z wszystkich pól w ciągu JSON. Może to być nieco bardziej skomplikowane, gdy robisz tablice, jeśli wolisz ręcznie parsować (również całkiem łatwo), sprawdź http://www.json.org/ i pobierz źródło Javy dla obiektów analizatora Json.

+0

który działa jak czar –

Powiązane problemy