JAVA
我想解析JSON文件的每个元素(使用gson将是最好的)到Array。我搜索了两天,但仍然无法弄清楚如何正确地做到这一点。我的JSON文件如下所示:
{
"spawn1": {
"x": 336.4962312645427,
"y": 81.0,
"z": -259.029426052796
},
"spawn2": {
"x": 341.11558917719424,
"y": 80.0,
"z": -246.07415114625
}
}
将会有越来越多具有不同名称的元素。我需要的是获取所有元素,如x,y,z,并使用它创建一个对象并将其放置到数组中。此对象的类如下所示:
public class Chest {
private double x, y, z;
public Chest(double x, double y, double z) {
this.x = x;
this.y = y;
this.z = z;
}
}
答案 0 :(得分:1)
使用您目前正在使用的课程不会起作用。
您的JSON字符串当前需要2个如下所示的类:
public class ClassOne
{
ClassTwo spawn1;
ClassTwo spawn2;
}
public class ClassTwo
{
double x;
double y;
double z;
}
因此,您需要更改JSON或类结构。
修改强>
如果你想要你当前使用的类,你需要一个这种形式的JSON字符串:
[
{
"x": 1.0,
"y": 2.0,
"z": 3.0
},
{
"x": 4.0,
"y": 5.0,
"z": 6.0
}
]
如果您希望维护spawn1
和spawn2
字段,请在您的类中添加String
字段,并使用这样的JSON字符串(此处字段的名称为{{1} }):
name
当您从JSON转换它们时,这两个都返回[
{
"name": "spawn1",
"x": 1.0,
"y": 2.0,
"z": 3.0
},
{
"name": "spawn2",
"x": 4.0,
"y": 5.0,
"z": 6.0
}
]
。
答案 1 :(得分:0)
使用JSON你有点棘手,因为你说Object的数量可以改变,但那些不在数组中。但您可以使用JsonObject.entrySet
首先,解析JSON并获取对象:
JsonObject json = JsonParser.parse(jsonToParse).getAsJsonObject();
然后迭代元素:
List<Chest> list = new ArrayList<>();
for(Entry<String, JsonElement> e : json.entrySet()){
//read the json you can find in `e.getValue()`
JsonObject o = e.getValue().getAsJsonObject();
double x = o.getAsJsonPrimitive("x").getAsDouble();
...
//create the instance `Chest` with those `double` and insert into a `List<Chest>`
list.add(new Chest(x,y,z));
}
如果要将名称检索到,则它位于输入键中:e.getKey()
。
请注意,这可以使用Stream
进行改进,但要保持家庭友好;)我会保持这种循环。