NYTimes Search API Parsing avec Gson: Comment désérialiser éléments JSON imbriqués?
Question
Je voudrais analyser une réponse de la recherche NYT API donné au format JSON. La chaîne de JSON se présente comme suit (extrait):
{"facets" :
{"des_facet" :
[
{"count" : 745 , "term" : "POLITICS AND GOVERNMENT"} ,
{"count" : 702 , "term" : "UNITED STATES INTERNATIONAL RELATIONS"}
],
"desk_facet" :
[
{"count" : 2251 , "term" : "Foreign Desk"} ,
{"count" : 242 , "term" : "Editorial Desk"}
]
}
}
Sur le côté Java, je prépare la hiérarchie des objets suivants:
public class Container {
Facet facets;
}
public class Facet {
Collection<Elements> des_facet;
Collection<Elements> desk_facet;
}
public class Elements {
private int count;
private String term;
}
... ce qui est de toute évidence ne fonctionne pas. Je suis nouveau à JSON. Par conséquent, la structure imbriquée des éléments est source de confusion.
Merci pour votre aide!
La solution
La structure de classe définie correspond à l'exemple JSON parfaitement bien, et désérialise sans erreur pour moi.
// output:
// {Container:
// facets=
// {Facet:
// des_facet=[
// {Elements: count=745, term=POLITICS AND GOVERNMENT},
// {Elements: count=702, term=UNITED STATES INTERNATIONAL RELATIONS}
// ],
// desk_facet=[
// {Elements: count=2251, term=Foreign Desk},
// {Elements: count=242, term=Editorial Desk}
// ]
// }
// }
import java.io.FileReader;
import java.util.Collection;
import com.google.gson.Gson;
public class Foo
{
public static void main(String[] args) throws Exception
{
Gson gson = new Gson();
Container container = gson.fromJson(new FileReader("input.json"), Container.class);
System.out.println(container);
}
}
class Container
{
Facet facets;
@Override
public String toString()
{
return String.format("{Container: facets=%s}", facets);
}
}
class Facet
{
Collection<Elements> des_facet;
Collection<Elements> desk_facet;
@Override
public String toString()
{
return String.format("{Facet: des_facet=%s, desk_facet=%s}", des_facet, desk_facet);
}
}
class Elements
{
private int count;
private String term;
@Override
public String toString()
{
return String.format("{Elements: count=%d, term=%s}", count, term);
}
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow