Parsing habe ich eine sehr lange JSON mit Gson zu analysieren, aber der Kürze halber habe ich es zu diesem Beispiel getrimmt:ein komplexes JSON-Objekt mit Gson in Java
{
"volumes": [
{
"status": "available",
"managed": true,
"name": "va_85621143-1133-412f-83b4-57a01a552638_",
"support": {
"status": "supported"
},
"storage_pool": "pfm9253_pfm9254_new",
"id": "afb8e294-6188-4907-9f6f-963c7623cecb",
"size": 9
},
{
"status": "in-use",
"managed": false,
"name": "bt_newd20",
"support": {
"status": "not_supported",
"reasons": [
"This volume is not a candidate for management because it is already attached to a virtual machine. To manage this volume with PowerVC, select the virtual machine to which the volume is attached for management. The attached volume will be automatically included for management."
]
},
"storage_pool": "KVM",
"mapped_wwpns": [
"2101001B32BD4280",
"2100001B329D4280",
"2101001B32BD637E",
"2100001B329D637E"
],
"id": "c7838c79-17ca-3cbc-98e5-3567fde902d8",
"size": 0
},
{
"status": "available",
"managed": true,
"name": "vdisk138",
"support": {
"status": "supported"
},
"storage_pool": "Chassis2_IBMi",
"id": "b6d00783-9f8c-40b8-ad78-956b0299478c",
"size": 100
}
]
}
Von SO und einigen anderen Orten, ich habe festgestellt, dass ich einen Top-Level-Container wie ein unten, aber ich weiß nicht, wie seine Definition abzuschließen
static class VolumeContainer {
//I don't know what do in here. This is the first problem
}
und dann eine Klasse für jeden Volume
static class Volume {
private String status;
private boolean managed;
private String name;
//This is the second problem.The "support" variable should not be a string.
//It is in {}. Just for information, I won't use it.
//private String support;
private String storagePool;
private List<String> mapped_wwpns;
private String id;
private String size;
}
definieren muß
Ich versuche, es zu analysieren, und das ist, was ich bisher codiert:
JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(response).getAsJsonObject();
Gson gson = new Gson();
Die JSON-String in einer Variablen Antwort
VolumeContainer vc = gson.fromJson(response,VolumeContainer.class);
Meine letzte Forderung ein HashTable
von id
Namen gespeichert ist, und assoziierte name
.
Vielen Dank, das funktioniert wie ein Charme. Im Gson-Beispiel haben sie vorausgesetzt, sie haben die Klasse statisch gemacht, können Sie bitte erklären, warum sie es getan haben und warum ich nicht sollte ?? http://code.google.com/p/google-gson/source/browse/trunk/extras/src/main/java/com/google/gson/extras/examples/rawcollections/RawCollectionsExample.java –
Sie ' Du bist willkommen. Sie machten eine statische Klasse, da es eine innere Klasse war (sie behielten Beispiel kompakt und da Gson nicht gut mit nicht statischen inneren Klassen ist). Wenn Sie Ihre Klassen in separaten Quelldateien deklarieren, benötigen Sie überhaupt keine statische Methode. Siehe dies: http://StackOverflow.com/Questions/19449761/Gson-does-Not-Deserialize-Reference-Touter-Class/19459605#19459605 – giampaolo
Sollten 'Volumes' nicht öffentlich sein? Sehen, wie Sie darauf zugreifen, als wäre es hier 'vc.volumes' (im vierten Problem). Oder fehlt mir etwas? – jackdh