簡體   English   中英

從JSON檢索結果到ArrayList

[英]Retrieving result from JSON to ArrayList

我有以下JSON- 在此處輸入圖片說明

  1. 旅程
    • {obj} 0
      • []腿
        • {obj} 0
          • {obj}指令
          • 詳細的“字符串”:字符串值在這里0
        • {obj} 1
          • {obj}指令
          • 詳細的“字符串”:字符串值在此處1
    • {obj} 1
      • []腿
        • {obj} 0
          • {obj}指令
          • 詳細的“字符串”:字符串值在這里0
        • {obj} 1
          • {obj}指令
          • 詳細的“字符串”:字符串值在此處1
    • {obj} 2
      • []腿
        • {obj} 0
          • {obj}指令
          • 詳細的“字符串”:字符串值在這里0
        • {obj} 1
          • {obj}指令
          • 詳細的“字符串”:字符串值在此處1

我的計划是遍歷值“旅程”並將它們存儲在ArrayList 同樣,將“腿”存儲在另一個ArrayList ,最后獲取檢索對象instruction的值。 如您所見,父journeys有3個孩子{obj} 0{obj} 1{obj} 2 我可以使用以下方式存儲journeys

ArrayList<JSONObject> journey = new ArrayList<>();
ArrayList<JSONArray> leg = new ArrayList<>();
ArrayList<JSONObject> legDetails = new ArrayList<>();

try {
            JSONArray jArray = object.getJSONArray("journeys");
            if (jArray != null) {
                for (int i=0;i<jArray.length();i++){
                    journey.add(jArray.getJSONObject(i));
                }
                if (!journey.isEmpty()){
                    for (int j=0;j<journey.size();j++){
                         leg.add(journey.get(j).getJSONArray("legs"));
                }
            }
            if (!leg.isEmpty()){
                for (int i = 0; i<leg.size();i++){
                     legDetails.add(leg.get(i).getJSONObject(i));
                    }
            }
          }
        } 
        catch (JSONException e) {
            e.printStackTrace();
        }

現在,每次旅程都會返回2條腿,並且數字會不時變化。 我在last for循環的末尾期望6 JSONObject ,但是我只得到2和一個超出范圍的異常。

要記住的事情:旅途有路線(Obj 0,1,2)。 路線有支腿(Obj 0,1)。 腿由帶detail字符串的instruction組成。

這是獲取價值的正確方法嗎? 我在做什么錯?

問題在這里

        if (!journey.isEmpty()){

          for (int j=0;j<journey.size();j++){
                   leg.add(journey.get(j).getJSONArray("legs"));

                }

        }

旅程有3個對象。

for j=0 you add journey[0] array to leg
for j=1 you add journey[1] array to leg
for j=2 you add journey[2] array to leg

所以腿將有3個陣列。

if (!leg.isEmpty()){
   for (int i = 0; i<leg.size();i++){
      legDetails.add(leg.get(i).getJSONObject(i));
   }
}

在這里leg.size()= 3;

for i=0 it will add leg[0]'s [0]th element
for i=1 it will add leg[1]'s [1]th element
for i=2 it will add leg[2]'s [2]th element (this is out of range)

更新::

if (!leg.isEmpty()){
   for (int i = 0; i<leg.size();i++){
      for(int j=0;j<leg.get(i).size();j++)
         legDetails.add(leg.get(i).getJSONObject(j));
   }
}

這應該有幫助

暫無
暫無

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

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