Domanda

Sto cercando di generare il seguente output JSON utilizzando Java Net.sf.json Libs ma non ho avuto successo.

{"dati": [[1, 1, "testo"], [2, 2, "testo"], [3, 0, "text"], [5, 2, "text"], "etichetta ":" Prima serie "}

Ho letto su questi forum che GSON è la mia scommessa migliore in futuro. Qualcuno può fornire un esempio di come generare questo JSON usando GSON o un'altra biblioteca basata su Java.

Grazie in anticipo

È stato utile?

Soluzione

Mi piace questohttp://www.json.org/javadoc/org/json/jsonbject.html da http://json.org/java/

e JsonArray.

Con quei 2 oggetti:

JSONArray inner = new JSONArray()
inner.add(1);inner.add("text");
JSONObject outer = new JSONObject();
outer.put("data",inner);
outer.put("label", "stuff");

String out = outer.toString()

Altri suggerimenti

Gson

GSON è una libreria Java che può essere utilizzata per convertire gli oggetti Java nella sua rappresentazione JSON. Può anche essere usato per convertire una stringa JSON in un oggetto Java equivalente. GSON può lavorare con oggetti Java arbitrari, inclusi oggetti preesistenti di cui non si dispone di code di origine.

Ci sono alcuni progetti open source che possono convertire gli oggetti Java in JSON. Tuttavia, la maggior parte di loro richiede di posizionare annotazioni Java nelle tue classi qualcosa che non puoi fare se non hai accesso al codice sorgente. Anche la maggior parte non supporta pienamente l'uso di Java Generics. GSON considera entrambi come obiettivi di progettazione molto importanti.

import com.google.gson.Gson;

class Person {
  private int age = 10;
  private String name = "jigar";
}

Person obj = new Person();
Gson gson = new Gson();
String json = gson.toJson(obj);

http://json.org/java/

import org.json.JSONObject;

...
...

JSONObject json = new JSONObject();
json.put("city", "Mumbai");
json.put("country", "India");

...

String output = json.toString();  

Questo è abbastanza facile usando un oggetto Java come questo:

public class GsonTest {
  private List<DataItem> data;
  private String label;

  public GsonTest() {} // for Gson

  public GsonTest(List<DataItem> data, String label) {
    this.data = data;
    this.label = label;
  }
  // ...
}

public class DataItem {
  private int val1;
  private int val2;
  private String text;

  public DataItem() {} // for Gson

  public DataItem(int val1, int val2, String text) {
    this.val1 = val1;
    this.val2 = val2;
    this.text = text;
  }
  // ...
}

Poiché il tuo formato JSON utilizza un array anziché un oggetto per ogni elemento di dati (un oggetto avrebbe più senso in base al campione) devi aggiungere un gestore personalizzato per la serializzazione e la deseriazione DataItemda e per gli array JSON.

public class DataItemConverter implements JsonDeserializer<DataItem>,
    JsonSerializer<DataItem> {

  public DataItem deserialize(JsonElement json, Type typeOfT, 
      JsonDeserializationContext context) throws JsonParseException {
    JsonArray array = json.getAsJsonArray();
    int val1 = array.get(0).getAsInt();
    int val2 = array.get(1).getAsInt();
    String text = array.get(2).getAsString();
    return new DataItem(val1, val2, text);
  }

  public JsonElement serialize(DataItem src, Type typeOfSrc, 
      JsonSerializationContext context) {
    JsonArray array = new JsonArray();
    array.add(new JsonPrimitive(src.val1));
    array.add(new JsonPrimitive(src.val2));
    array.add(new JsonPrimitive(src.text));
    return array;
  }
}

Quindi devi solo registrare questo convertitore quando crei il tuo Gson istanza e sei a posto! Dal nostro DataItem Il convertitore gestisce anche la deserializzazione, sarai in grado di deserializzare il JSON generato come un List<GsonTest> anche.

public static void testSerialization() {
  List<DataItem> data = new ArrayList<DataItem>();
  data.add(new DataItem(1, 1, "Text"));
  data.add(new DataItem(2, 2, "Text"));
  data.add(new DataItem(3, 0, "Text"));
  data.add(new DataItem(5, 2, "Text"));

  GsonTest test = new GsonTest(data, "First Series");
  List<GsonTest> list = new ArrayList<GsonTest>();
  list.add(test);
  Gson gson = new GsonBuilder()
      .registerTypeAdapter(DataItem.class, new DataItemConverter())
      .create();
  System.out.println(gson.toJson(list));
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top