繁体   English   中英

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

[英]Parse every element of JSON to Array in Java

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

对于您当前正在使用的课程,它将无法正常工作。

您的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 String(此处的字段名称为name ):

[
  {
    "name": "spawn1",
    "x": 1.0,
    "y": 2.0,
    "z": 3.0
  },
  {
    "name": "spawn2",
    "x": 4.0,
    "y": 5.0,
    "z": 6.0
  }
]

从JSON转换它们时,它们都返回Chest[]

与GSON

使用JSON有点棘手,因为您说过对象的数量可以更改,但是这些不在数组中。 但是您可以使用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进行改进,但要使其与家人保持友好;)我将保留该循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM