簡體   English   中英

嵌套的 JSONArray

[英]Nested JSONArray

我需要讀取具有以下形式的 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

我嘗試了幾十種不同的解決方案(自己嘗試並嘗試在這里找到一些東西,但是嵌套 arrays 的每個案例都是不同的,我無法將這些解決方案加在一起以獲得我的案例的答案)

如果美化原始 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 的數組。

要遍歷您的 Object 數組,您可以使用您已正確完成的for 循環

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的第一個 Object 中,因此您需要像這樣訪問它:

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

而要訪問foofoo ,因為它是JSON Object anotherData的一個屬性,所以你應該先獲取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");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM