Java 解析包含更改键的嵌套JSON对象
我在java中使用Gson解析JSON文件。问题是json对象包含另一组对象。这不会是一个问题,因为我可以创建另一个类并将其输入。问题是这些子对象包含的关键点在每个子对象中都可能不同。我不知道该怎么处理。 下面是JSON的剪贴画:Java 解析包含更改键的嵌套JSON对象,java,json,parsing,gson,Java,Json,Parsing,Gson,我在java中使用Gson解析JSON文件。问题是json对象包含另一组对象。这不会是一个问题,因为我可以创建另一个类并将其输入。问题是这些子对象包含的关键点在每个子对象中都可能不同。我不知道该怎么处理。 下面是JSON的剪贴画: [ { "a": "aa", "b": 1, "c": "cc", "d": 2.2, "e&
[
{
"a": "aa",
"b": 1,
"c": "cc",
"d": 2.2,
"e": 3.3,
"obj1": {"lu":1,"lo":1},
"arr1": [],
"obj2": {}
},
{
"a": "aaa",
"b": 4,
"c": "ccc",
"d": 5.5,
"e": 6.6,
"obj1": {"bli":1},
"arr1": ["Some String"],
"obj2": {
"foo": 100,
"bar": 50,
"bla": 1
}
},
{
"a": "aaaa",
"b": 7,
"c": "cccc",
"d": 8.8,
"e": 9.9,
"obj1": {},
"arr1": ["Some String", "Another one"],
"obj2": {
"la": 300,
"le": 20000
}
}
]
如您所见,obj1和obj2包含不一致的键。
以下是我将数据解析为的jObject类的当前代码:
public class jObject {
String a;
Integer b;
String c;
Double d;
Double e;
// List<Pair<String,Integer>> obj1;
List<String> arr1;
// List<Pair<String,Integer>> obj2;
public jObject(String a, Integer b, String c, Double d, Double e,
List<Pair<String,Integer>> obj1, List<String> arr1,List<Pair<String,Integer>> obj2) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.e = e;
// this.obj1 = obj1;
this.arr1 = arr1;
// this.obj2 = obj2;
}
}
公共类jObject{
字符串a;
整数b;
字符串c;
双d;
双e;
//列出obj1;
清单1;
//列出obj2;
PublicJobject(字符串a、整数b、字符串c、双d、双e、,
列表obj1、列表arr1、列表obj2){
这个a=a;
这个.b=b;
这个.c=c;
这个。d=d;
这个。e=e;
//此参数为0.obj1=obj1;
这是arr1=arr1;
//此参数为0.obj2=obj2;
}
}
它适用于所有普通键以及“arr1”数组
如果您想知道,我实际上是如何解析它的:
Gson gson = new Gson();
Reader reader = Files.newBufferedReader(Paths.get("PATH_TO_JSON"));
List<jObject> objects = gson.fromJson(reader, new TypeToken<List<jObject>>() {}.getType());
Gson-Gson=new-Gson();
Reader Reader=Files.newbuffereder(PATH.get(“PATH_TO_JSON”));
List objects=gson.fromJson(reader,new-TypeToken(){}.getType());
我想要实现的是,“obj1”和“obj2”将作为jObject类的一部分保存为字符串和整数元组的列表
我到处找了不少,但找不到与这个问题有关的任何东西
提前谢谢 JsonObject无法轻松解析为列表或数组。但它可以很容易地解析为映射,例如,可以使用entrySet()方法手动转换为Set的映射
更困难的方法是为特定类型实现您自己的反序列化程序,例如对列表。您可以使用
Map
公共类jObject{
字符串a;
整数b;
字符串c;
双d;
双e;
Map obj1;
清单1;
地图obj2;
PublicJobject(字符串a、整数b、字符串c、双d、双e、,
地图obj1、列表arr1、地图obj2){
这个a=a;
这个.b=b;
这个.c=c;
这个。d=d;
这个。e=e;
此参数为0.obj1=obj1;
这是arr1=arr1;
此参数为0.obj2=obj2;
}
}