本文介绍了在反序列化json时跳过根元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我应该如何反序列化JSON以跳过根元素并仅解析此JSON的内部部分。我想避免创建额外的第三级 Root
,其中只包含 MapWrapper
字段。
{
root:{
language:en,
map: {
k1:{
name:n1,
},
k2:{
name:n2,
code $
$ b因此我'我想只有这两个类:
class MapWrapper {
private String language;
私人地图< String,MyMapEntry>地图;
}
class MyMapEntry {
String name;
解决方案您可以使用<$ c
以下代码将解决您的问题。
public class ConvertJsonToObject {
private static Gson gson = new GsonBuilder()。create();
public static final< T> T getFromJSON(String json,Class< T> clazz){
return gson.fromJson(json,clazz);
}
public static final< T> String toJSON(T clazz){
return gson.toJson(clazz);
}
}
字符串json; //你的jsonString
Map< String,Object> r = ConvertJsonToObject.getFromJSON(json,Map.class);
String innerJson = ConvertJsonToObject.toJson(r.get(root));
MapWrapper _r = ConvertJsonToObject.getFromJSON(innerJson,MapWrapper.class);
How should I deserialize following JSON to skip root element and parse just the inner part of this JSON. I'd like to avoid creating additional, 3rd class Root
, which would include only MapWrapper
field.
{
"root": {
"language": "en",
"map": {
"k1": {
"name": "n1",
},
"k2": {
"name": "n2",
}
}
}
}
So I'd like to have only these two classes:
class MapWrapper {
private String language;
private Map<String, MyMapEntry> map;
}
class MyMapEntry {
String name;
}
解决方案 you can use GSON
Library for this.
Below code will solve your problem.
public class ConvertJsonToObject {
private static Gson gson = new GsonBuilder().create();
public static final <T> T getFromJSON(String json, Class<T> clazz) {
return gson.fromJson(json, clazz);
}
public static final <T> String toJSON(T clazz) {
return gson.toJson(clazz);
}
}
String json; // your jsonString
Map<String,Object> r = ConvertJsonToObject.getFromJSON(json,Map.class);
String innerJson = ConvertJsonToObject.toJson(r.get("root"));
MapWrapper _r = ConvertJsonToObject.getFromJSON(innerJson,MapWrapper.class);
这篇关于在反序列化json时跳过根元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!