在Java中将JSON的每个元素解析为Array

时间:2018-03-21 12:12:12

标签: java arrays json parsing

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;
  }
}

2 个答案:

答案 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
  }
]

如果您希望维护spawn1spawn2字段,请在您的类中添加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)

使用GSON

使用JSON你有点棘手,因为你说Object的数量可以改变,但那些不在数组中。但您可以使用JsonObject.entrySet

使用GSON迭代每个元素

首先,解析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进行改进,但要保持家庭友好;)我会保持这种循环。