NYTimes Search API Parsing avec Gson: Comment désérialiser éléments JSON imbriqués?

StackOverflow https://stackoverflow.com/questions/4085565

  •  28-09-2019
  •  | 
  •  

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!

Était-ce utile?

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
scroll top