2013-06-17 8 views
6

Chciałbym użyć biblioteki Json, która jest dostarczana ze strukturą gry 2.1. Ale utknąłem z deserializacji obiektu Json z powrotem do listy Java.W jaki sposób plik play.libs.Json.fromJson obsługuje listę <T> w języku Java?

Dzięki gson możesz napisać s.th. lubię

Type type = new TypeToken<List<XYZ>>(){}.getType(); 
List<XYZ> xyzList = gson.fromJson(jsonXyz, type); 

Czy jest sposób na to samo z play.libs.Json.fromJson?

Każda pomoc doceniona.

Edit (17.12.2013):

zrobiłem następujące czynności, aby obejść problem. Sądzę, że jest lepszy sposób, ale go nie znalazłem.

List<MyObject> response = new ArrayList<MyObject>(); 
Promise<WS.Response> result = WS.url(Configuration.getRestPrefix() + "myObjects").get(); 
WS.Response res = result.get(); 
JsonNode json = res.asJson(); 
if (json != null) { 
    for (JsonNode jsonNode : json) { 
    if (jsonNode.isArray()) { 
     for (JsonNode jsonNodeInner : jsonNode) { 
     MyObject mobj = Json.fromJson(jsonNodeInner, MyObject.class); 
     response.add(bst); 
     } 
    } else { 
     MyObject mobj = Json.fromJson(jsonNode, MyObject.class); 
     response.add(bst); 
    } 
    } 
} 
return response; 
+0

wpadłem na podobny problem, jak się go rozwiązać? – raksja

Odpowiedz

7

Biblioteka Json do gry Java jest naprawdę cienka owijka nad biblioteką Jackson JSON (http://jackson.codehaus.org/). Sposób Jacksona na deserializację listy obiektów niestandardowych jest wymieniony na here.

Dla przypadku, gdy analizować JSON z organizmu reakcji, byś zrobił coś takiego, zakładając MyObject jest zwykły POJO:

JsonNode json = res.asJson(); 
try{ 
    List<MyObject> objects = new ObjectMapper().readValue(json, new TypeReference<List<MyObject>>(){}); 
}catch(Exception e){ 
    //handle exception 
} 

Ja zakładając, że pytali o Jawa Gra oparta W edytorze biblioteka JSON gry Play Scala jest również oparta na Jackson, ale ma więcej funkcji i cukru syntaktycznego, aby dostosować się do funkcjonalnych wzorców programowania.

+0

Wygląda na to, że z Play2/Jackson2 będzie to Json.mapper(). ReadValue (json.traverse(), nowy TypeReference ...) – tkruse

1

można użyć następującego kodu:

List<YourClass> returnedRoles = new ObjectMapper().readValue(jsonString 
    ,TypeFactory.defaultInstance().constructCollectionType(List.class, 
    YourClass.class)); 
+0

, ale to rozwiązanie wykorzystuje samodzielny program odwzorowujący jacksona i nie korzysta z pomocnika JSON ramek odtwarzania i obiekt odwzorowujący obiekty. a może się zmienić w Global –

Powiązane problemy