Je nachdem, was Sie versuchen zu tun. Sie könnten einfach eine POJO-Hierarchie einrichten, die zu Ihrer json
here (Bevorzugte Methode) passt. Oder Sie können eine benutzerdefinierte deserializer bereitstellen. Ich habe mich nur mit den id
Daten beschäftigt, da ich annahm, dass es sich um die knifflige Implementierung handelte. Gehen Sie einfach durch die json
mit den gson
Typen und erstellen Sie die Daten, die Sie darstellen möchten. Die und Id
Klassen sind nur pojos
zusammengesetzt und reflektieren die Eigenschaften in der ursprünglichen json
Zeichenfolge.
public class MyDeserializer implements JsonDeserializer<Data>
{
@Override
public Data deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) throws JsonParseException
{
final Gson gson = new Gson();
final JsonObject obj = je.getAsJsonObject(); //our original full json string
final JsonElement dataElement = obj.get("data");
final JsonElement idElement = dataElement.getAsJsonObject().get("id");
final JsonArray idArray = idElement.getAsJsonArray();
final List<Id> parsedData = new ArrayList<>();
for (Object object : idArray)
{
final JsonObject jsonObject = (JsonObject) object;
//can pass this into constructor of Id or through a setter
final JsonObject stuff = jsonObject.get("stuff").getAsJsonObject();
final JsonArray valuesArray = jsonObject.getAsJsonArray("values");
final Id id = new Id();
for (Object value : valuesArray)
{
final JsonArray nestedArray = (JsonArray)value;
final Integer[] nest = gson.fromJson(nestedArray, Integer[].class);
id.addNestedValues(nest);
}
parsedData.add(id);
}
return new Data(parsedData);
}
}
Test:
@Test
public void testMethod1()
{
final String values = "[[123, 456], [987, 654]]";
final String id = "[ {stuff: { }, values: " + values + ", otherstuff: 'stuff2' }]";
final String jsonString = "{data: {id:" + id + "}}";
System.out.println(jsonString);
final Gson gson = new GsonBuilder().registerTypeAdapter(Data.class, new MyDeserializer()).create();
System.out.println(gson.fromJson(jsonString, Data.class));
}
Ergebnis:
Data{ids=[Id {nestedList=[[123, 456], [987, 654]]}]}
POJO:
public class Data
{
private List<Id> ids;
public Data(List<Id> ids)
{
this.ids = ids;
}
@Override
public String toString()
{
return "Data{" + "ids=" + ids + '}';
}
}
public class Id
{
private List<Integer[]> nestedList;
public Id()
{
nestedList = new ArrayList<>();
}
public void addNestedValues(final Integer[] values)
{
nestedList.add(values);
}
@Override
public String toString()
{
final List<String> formattedOutput = new ArrayList();
for (Integer[] integers : nestedList)
{
formattedOutput.add(Arrays.asList(integers).toString());
}
return "Id {" + "nestedList=" + formattedOutput + '}';
}
}
Ich nehme die Freiheit, Ihnen http://json.parser.online.fr/ vorzuschlagen, entdeckte auch einen Syntaxfehler auf Json, der von PO bereitgestellt wurde. – giampaolo
Ich denke, [link] [http://www.jsonschema2pojo.org] ist wirklich nützlich, um eine JSON-Antwort zu nehmen und Java-Objekte für Sie zu erstellen! –