2010-10-27 4 views
2

J'essaie de générer la sortie json suivante en utilisant les librairies java net.sf.json mais cela a échoué.Comment fournir la sortie json suivante en utilisant java

[ { "données" [ [ 1, 1, "Texte" ], [ 2, 2, "Texte" ], [ 3, 0 , "texte" ], [ 5, 2, "texte" ] ], "label": "Première série" } ]

J'ai lu sur ces forums Gson est mon meilleur pari pour l'avenir. Quelqu'un peut-il fournir un exemple de la façon de générer ce json en utilisant Gson ou une autre bibliothèque Java appropriée.

Merci à l'avance

Répondre

2

i like this http://www.json.org/javadoc/org/json/JSONObject.html de http://json.org/java/

et JSONArray.

avec ces 2 objets:

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() 
+0

J'ai essayé ceci et cela a fait l'affaire. J'ai ajouté deux autres inners pour correspondre exactement au json que j'étais après. Très appréciée. – jaseFace

2

Gson

Gson est une bibliothèque Java qui peut être utilisé pour convertir objets Java dans sa représentation JSON. Il peut également être utilisé pour convertir une chaîne JSON en un objet Java équivalent. Gson peut fonctionner avec des objets Java arbitraires, y compris des objets préexistants dont vous n'avez pas le code source.

Il existe quelques projets Open Source pouvant convertir des objets Java en JSON. Cependant, la plupart d'entre eux exigent que vous placiez des annotations Java dans vos classes quelque chose que vous ne pouvez pas faire si vous n'avez pas accès au code source. La plupart ne supportent pas totalement l'utilisation de Java Generics. Gson considère ces deux aspects comme des objectifs de conception très importants.

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(); 
2

Ceci est assez facile en utilisant un objet Java comme ceci:

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

Depuis votre format JSON utilise un tableau plutôt qu'un objet pour chaque élément de données (un objet aurait plus de sens en fonction de votre exemple) vous devez ajouter un gestionnaire personnalisé pour sérialiser et désérialiser DataItem s vers et depuis les baies 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; 
    } 
} 

Ensuite il vous suffit d'enregistrer ce convertisseur lorsque vous créez votre Gson instance et vous êtes bon pour vous! Puisque notre convertisseur DataItem gère également la désérialisation, vous pouvez également désérialiser le JSON généré en tant que List<GsonTest>.

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)); 
} 
Questions connexes