यह एक पास में ऐसा करने के लिए इष्टतम कोड है।
MapWrapper
वर्ग
public class MapWrapper {
private String language;
private Map<String, MyMapEntry> map;
public MapWrapper(String language, Map<String, MyMapEntry> map) {
this.language = language;
this.map = map;
}
}
MyMapEntry
वर्ग
public class MyMapEntry {
String name;
public MyMapEntry(String name) {
this.name = name;
}
}
कस्टम deserializer
public class MyDeserialiser implements JsonDeserializer<MapWrapper>
{
@Override
public MapWrapper deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext ctx) throws JsonParseException {
JsonObject _global = json.getAsJsonObject();
_global = _global.get("root").getAsJsonObject();
JsonPrimitive lang = (JsonPrimitive) _global.get("language");
JsonElement map = _global.get("map");
Map<String, MyMapEntry> inMap = new LinkedHashMap<String, MyMapEntry>();
for (Entry<String, JsonElement> entry : map.getAsJsonObject()
.entrySet()) {
MyMapEntry _m = new MyMapEntry(entry.getValue().toString());
inMap.put(entry.getKey(), _m);
}
return new MapWrapper(lang.getAsString(), inMap);
}
}
GSON
साथ
new GsonBuilder().registerTypeAdapter(MapWrapper.class,new MyDeserialiser()).create()
यह रजिस्टर इस JSON के लिए मूल तत्व के बिना JSON का उपयोग कर से/
public class Authorization {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// Add a container for the root element
public static class Container {
public Authorization authorization;
}
}
Convert
{"authorization":{"username":"userabc", "password":"passabc"}}
डीटीओ:
अब कोड निम्नलिखित
String json; // your jsonString
MapWrapper result = ConvertJsonToObject.getFromJSON(json,MapWrapper.class);
साफ समाधान। +1 –
यह कोड दो बार json parses। क्या इससे बचना संभव है? –
हाँ कस्टम JsonDeserializer लिखकर और इसे GSON में पंजीकृत करके ऐसा करना संभव है। – Byter