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

在Java中将JSON的每个元素解析为数组,java,arrays,json,parsing,Java,Arrays,Json,Parsing,爪哇 我想使用gson解析JSON文件的每个元素,这将是最好的数组。我搜索了两天,仍然不知道如何正确操作。我的JSON文件如下所示: { "spawn1": { "x": 336.4962312645427, "y": 81.0, "z": -259.029426052796 }, "spawn2": { "x": 341.11558917719424, "y": 80.0, "z": -246.07415114625 } } p

爪哇

我想使用gson解析JSON文件的每个元素,这将是最好的数组。我搜索了两天,仍然不知道如何正确操作。我的JSON文件如下所示:

{
  "spawn1": {
    "x": 336.4962312645427,
    "y": 81.0,
    "z": -259.029426052796
  },
  "spawn2": {
    "x": 341.11558917719424,
    "y": 80.0,
    "z": -246.07415114625
  }
}
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;
  }
}
public class ClassOne
{
    ClassTwo spawn1;
    ClassTwo spawn2;
}

public class ClassTwo
{
    double x;
    double y;
    double z;
}
将有越来越多的元素具有不同的名称。我需要的是获取所有元素,如x、y、z,并使用它创建一个对象,然后将其放置到数组中。此对象的类如下所示:

{
  "spawn1": {
    "x": 336.4962312645427,
    "y": 81.0,
    "z": -259.029426052796
  },
  "spawn2": {
    "x": 341.11558917719424,
    "y": 80.0,
    "z": -246.07415114625
  }
}
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;
  }
}
public class ClassOne
{
    ClassTwo spawn1;
    ClassTwo spawn2;
}

public class ClassTwo
{
    double x;
    double y;
    double z;
}

对于您当前使用的类,它将不起作用

您的JSON字符串当前需要两个如下所示的类:

{
  "spawn1": {
    "x": 336.4962312645427,
    "y": 81.0,
    "z": -259.029426052796
  },
  "spawn2": {
    "x": 341.11558917719424,
    "y": 80.0,
    "z": -246.07415114625
  }
}
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;
  }
}
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字段,请在类中添加一个字符串字段,并使用如下JSON字符串,该字段的名称为:

当您从JSON转换它们时,这两个函数都会返回一个cost[] 使用JSON有点棘手,因为您说过对象的数量可以更改,但它们不在数组中。但是您可以使用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


注意,这可以通过使用流来改进,但要保持家庭友好;我将保留该循环。

如果您指定正在使用的编程语言会更好吗?是C?天哪!我很抱歉。刚刚编辑-它是Java:您的数据是一个JSON对象,键为spawn1和spawn2。您希望如何转换它?一组忽略钥匙的胸部物体?嗯。是的,我的对象中不需要这些名称。我唯一要用的是坐标。你知道GSON,但我没有尝试过实现它,为什么?我需要的是获取所有元素,如x、y、z,并使用它创建一个对象,然后将其放置到array@AxelH我完全理解这是他想要的,但这不是他的JSON对应的。从他拥有的JSON字符串中,如果没有自定义加载程序,他将永远无法获得该字符串。所以要么改变你的JSON要么改变你的类结构。但正如我所说的,将会有更多的对象,比如spawn1和spawn2,所以我认为为每个对象创建类不是一个好主意。是不是不可能遍历每一个对象,比如spawn1、spawn2,为每个对象创建对象并将其放入胸部对象数组中?@Norbox我更新了我的答案,让你朝着正确的方向点头。通常,如果您的JSON字符串没有反序列化到您的对象,请尝试另一种方法:将您的一个对象序列化为JSON,以查看字符串的外观。谢谢,我将在明天检查该字符串