Frage

Ich mag eine Antwort von dem NYT Search API im JSON-Format gegeben analysieren. Die JSON-String sieht wie folgt aus (Auszug):

{"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"}
    ]
  }
}

Auf Java-Seite, ich bereit, die folgende Objekthierarchie:

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;
}

... was natürlich nicht funktioniert. Ich bin neu in JSON. Daher wird die verschachtelte Struktur von Elementen verwirrend.

Vielen Dank für Ihre Hilfe!

War es hilfreich?

Lösung

Die definierte Klassenstruktur entspricht das Beispiel JSON sehr gut, und deserialisiert ohne Fehler für mich.

// 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);
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top