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