嵌套JSON阵列

bf1o4zei  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(94)

我需要读取以下形式的JSON文件:

{
"Data":[{
"foo":"22",
"bar":"33",
"array":[
{
"1foo":"22",
"1bar":"33"
},
{
"2foo":"22",
"2bar":"33",
}
],
"anotherData":{
"foofoo":"22",
"barbar":"33"
},
"some more data":"11",
"some more data":"11"
},
{and the cycle here starts again from -->
"foo":"22",
"bar":"33",
"array":[

我的问题是:如何访问单个元素,有时是JSONObject,有时是JSONArray。我尝试使用org.json库,但无法访问此行之后的任何内容-〉“array”:[。我尝试了JSONObject和JSONArray的各种组合,但都无济于事。
我最新的代码看起来像这样:

List<Data> data= new ArrayList<>();
        String rawJson = getJsonAsString();
        JSONObject outer = new JSONObject(rawJson);
        JSONArray jArr= outer.getJSONArray("Data");
        JSONObject inner= outer.getJSONObject("array");
for(int i =0; i<jArr.length(); i++){
JSONObject jsonEvent = jArr.getJSONObject(i);

String foo = jsonEvent.getString("foo"); <-- this works,
String 1foo = jsonEvent.getString("1foo"); <-- but this doesn't and i cant access it

我尝试了几十种不同的解决方案(我自己也尝试过,也试图在这里找到一些东西,但每个嵌套数组的情况都是不同的,我不能把这些解决方案加在一起来得到我的情况的答案)

rkttyhzu

rkttyhzu1#

如果美化原始JSON字符串,可以提高可读性:

{
   "Data":[
      {
         "foo":"22",
         "bar":"33",
         "array":[
            {
               "1foo":"22",
               "1bar":"33"
            },
            {
               "2foo":"22",
               "2bar":"33"
            }
         ],
         "anotherData":{
            "foofoo":"22",
            "barbar":"33"
         },
         "some more data":"11",
         "some more data":"11"
      },
      { and the cycle here starts again from -->
         "foo":"22",
         "bar":"33",
         "array":[
            ...
         ],
         ...
      }
   ]
}

因此,请坚持使用以下代码:

JSONArray jArr = outer.getJSONArray("Data");

jArr现在已填充对象的数组。
要循环遍历Object数组,可以使用一个for-loop,您已经正确地执行了该操作。

for (int i = 0; i < jArr.length(); i++) {
    // The below gets your Object
    JSONObject jsonEvent = jArr.getJSONObject(i);
}

现在,每个jsonEvent都包含您的Object,您可以通过它们的类型访问Object。
例如,如果您想访问foo,可以用途:

String foo = jsonEvent.getString("foo"); // foo = "22"
String bar = jsonEvent.getString("bar"); // bar = "33"
// Note that your array is another Array, you need to get it as JSONArray first
JSONArray arrayJson = jsonEvent.getJSONArray("array");

由于1foo位于array的第一个对象中,您需要按如下方式访问它:

JSONObject firstObjectInArray = arrayJson.getJSONObject(0);
String target = firstObjectInArray.getString("1foo"); // target = "22"

而要访问foofoo,因为它是JSON ObjectanotherData的属性,所以需要先获取anotherData作为JSONObject,然后才能访问foofoo

JSONObject anotherDataObject = jsonEvent.getJSONObject("anotherData");
String foofoo = anotherDataObject.getString("foofoo"); // foofoo = "22"

因此,for循环中的完整代码应该如下所示:

for (int i = 0; i < jArr.length(); i++) {
    // The below gets your Object
    JSONObject jsonEvent = jArr.getJSONObject(i);

    String foo = jsonEvent.getString("foo");
    JSONArray arrayJson = jsonEvent.getJSONArray("array");
    String target = arrayJson.getJSONObject(0).getString("1foo");

    // Add to get foofoo
    JSONObject anotherDataObject = jsonEvent.getJSONObject("anotherData");
    String foofoo = anotherDataObject.getString("foofoo");
}

相关问题