簡體   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