如何从android中的json获取内部数组?

时间:2017-07-04 05:06:22

标签: android

{"Suggestions":[{"Itinerary_1":[{"Cities":"Madurai - Pazhamudir Cholai (Madurai) - Pillayarpatti - Chennai","Citieids":"14-85-114-2","Kms":595}],"Itinerary_2":[{"Cities":"Madurai - Pillayarpatti - Pillayarpatti - Chennai","Citieids":"14-114-114-2","Kms":560}],"Itinerary_3":[{"Cities":"Madurai - Pillayarpatti - Pillayarpatti - Chennai","Citieids":"14-114-114-2","Kms":560}]}]}

这是我的json响应。这个json有一个内部数组我怎么能得到值

这是我的代码:

class itinerarydetails extends AsyncTask<String, String, String> {

        /**
         * Before starting background thread Show Progress Dialog
         */
        boolean failure = false;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... args) {
            // TODO Auto-generated method stub
            // Check for success tag
            int success;


            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("orgin", "14"));
            params.add(new BasicNameValuePair("destination", "2"));
            params.add(new BasicNameValuePair("orgin_date", "28/06/2017"));
            params.add(new BasicNameValuePair("destination_date", "07/07/2017"));

             json = jsonParser.makeHttpRequest(itineraryurl, "GET",
                    params);
            try {

                //Suggestions
                jsonarray = json.getJSONArray("Suggestions");
               // JSONArray list = mainObj.getJSONArray("prodCat_list");

                String check;
                if(jsonarray != null) {
                   // Toast.makeText(getApplicationCon                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          text(), "MAIN ARRAY IS NOT EMPTY ITS HAVE A VALUE",
                    //  Toast.LENGTH_SHORT).show();

                    Log.d("check","MAIN ARRAY IS NOT EMPTY ITS HAVE A VALUE");

                    for (int i = 0; i < jsonarray.length(); i++) {
                        //   JSONObject elem = list.getJSONObject(i);

                        JSONObject object = jsonarray.getJSONObject(i);

                        //JSONArray prods = elem.getJSONArray("prods");

                        jsoninsidearray = object.getJSONArray("Itinerary_1");

                        if(jsoninsidearray != null) {

                            Log.d("check","INSIDE ARRAY IS NOT EMPTY ITS HAVE A VALUE");

                            for (int j = 0; j < jsoninsidearray.length(); j++) {
                                JSONObject innerElem = jsoninsidearray.getJSONObject(j);


                                if(innerElem != null) {


                                    Log.d("check","innerElement ARRAY IS NOT EMPTY ITS HAVE A VALUE");
                                    cityjson = innerElem.getString("Cities");
                                    itinerary = innerElem.getString("Citieids");
                                    totalkms = innerElem.getString("Kms");

                                }
                               else
                                {
                                    Log.d("check","innerElement ARRAY IS EMPTY");

                                }

                            }
                        }
                        else
                        {
                           Toast.makeText(getApplicationContext(), "INSIDE ARRAY IS EMPTY",
                                   Toast.LENGTH_SHORT).show();

                            Log.d("check","INSIDE ARRAY IS EMPTY");
                        }


                    }
                }
                else
                {
                    Toast.makeText(getApplicationContext(), "MAIN ARRAY IS EMPTY",
                            Toast.LENGTH_SHORT).show();

                    Log.d("check","MAIN ARRAY IS EMPTY");
                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }


        protected void onPostExecute(String file_url) {

            Toast.makeText(getApplicationContext(), "hai",
                    Toast.LENGTH_SHORT).show();
            Toast.makeText(getApplicationContext(), cityjson, Toast.LENGTH_SHORT).show();



        }

    }

我是Vignesh,我有一个疑问,请在下面帮助 但是显示了空值。我可以从json中获取内部数组的值。

5 个答案:

答案 0 :(得分:3)

让我们尝试理解输入JSON对象的结构。

  • 建议(JSONArray)
    • 第一个对象(JSONObject)
      • 行程_1(JSONArray)
        • 第一个对象(JSONObject)
          • cities(String)
          • citieids(String)
          • kms(String)
      • 行程_2(JSONArray)
        • 第一个对象(JSONObject)
          • cities(String)
          • citieids(String)
          • kms(String)
      • Itinerary_3(JSONArray)
        • 第一个对象(JSONObject)
          • cities(String)
          • citieids(String)
          • kms(String)
    • 第二个对象(JSONObject)
      • 行程_1(JSONArray)
        • 第一个对象(JSONObject)
          • cities(String)
          • citieids(String)
          • kms(String)
      • 行程_2(JSONArray)
        • 第一个对象(JSONObject)
          • cities(String)
          • citieids(String)
          • kms(String)
      • Itinerary_3(JSONArray)
        • 第一个对象(JSONObject)
          • cities(String)
          • citieids(String)
          • kms(String)
    • 等......

格式化的JSON对象

{
   "Suggestions":[
      {
         "Itinerary_1":[
            {
               "Cities":"Madurai - Pazhamudir Cholai (Madurai) - Pillayarpatti - Chennai",
               "Citieids":"14-85-114-2",
               "Kms":595
            }
         ],
         "Itinerary_2":[
            {
               "Cities":"Madurai - Pillayarpatti - Pillayarpatti - Chennai",
               "Citieids":"14-114-114-2",
               "Kms":560
            }
         ],
         "Itinerary_3":[
            {
               "Cities":"Madurai - Pillayarpatti - Pillayarpatti - Chennai",
               "Citieids":"14-114-114-2",
               "Kms":560
            }
         ]
      }
   ]
}

因此,您的代码应该有一个额外的for循环来遍历建议中每个JSONObject的3个行程元素。

这是更新的代码,请查看添加了index的新for循环作为迭代计数器。

    try {
        JSONObject json = new JSONObject("{\"Suggestions\":[{\"Itinerary_1\":[{\"Cities\":\"Madurai - Pazhamudir Cholai (Madurai) - Pillayarpatti - Chennai\",\"Citieids\":\"14-85-114-2\",\"Kms\":595}],\"Itinerary_2\":[{\"Cities\":\"Madurai - Pillayarpatti - Pillayarpatti - Chennai\",\"Citieids\":\"14-114-114-2\",\"Kms\":560}],\"Itinerary_3\":[{\"Cities\":\"Madurai - Pillayarpatti - Pillayarpatti - Chennai\",\"Citieids\":\"14-114-114-2\",\"Kms\":560}]}]}");
        JSONArray jsonarray = json.getJSONArray("Suggestions");
        if(jsonarray != null) {
            Log.d("check","MAIN ARRAY IS NOT EMPTY ITS HAVE A VALUE");
            for (int i = 0; i < jsonarray.length(); i++) {
                JSONObject object = jsonarray.getJSONObject(i);
                // ** START NEW FOR LOOP
                for (int index=1; index < 4; index++) {
                    Log.d("check","-------------------------");
                    Log.d("check","Print Itinerary_" + (index));
                    JSONArray jsoninsidearray = object.getJSONArray("Itinerary_" + index);
                    if(jsoninsidearray != null) {
                        Log.d("check","INSIDE ARRAY IS NOT EMPTY ITS HAVE A VALUE");
                        for (int j = 0; j < jsoninsidearray.length(); j++) {
                            JSONObject innerElem = jsoninsidearray.getJSONObject(j);
                            if(innerElem != null) {
                                Log.d("check","innerElement ARRAY IS NOT EMPTY ITS HAVE A VALUE");
                                String cityjson = innerElem.getString("Cities");
                                String itinerary = innerElem.getString("Citieids");
                                String totalkms = innerElem.getString("Kms");
                                Log.d("check", cityjson + " | " + itinerary + " | " + totalkms);
                            } else {
                                Log.d("check","innerElement ARRAY IS EMPTY");
                            }
                        }
                    } else {
                        Log.d("check","INSIDE ARRAY IS EMPTY");
                    }
                } // ** END NEW FOR LOOP
            Log.d("check", "");
            }
        } else {
            Log.d("check","MAIN ARRAY IS EMPTY");
        }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

示例运行

07-03 22:03:05.028 30616-30616/a D/check: MAIN ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.028 30616-30616/a D/check: --------------------------
07-03 22:03:05.028 30616-30616/a D/check: Print Itinerary_1
07-03 22:03:05.028 30616-30616/a D/check: INSIDE ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.028 30616-30616/a D/check: innerElement ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.028 30616-30616/a D/check: Madurai - Pazhamudir Cholai (Madurai) - Pillayarpatti - Chennai | 14-85-114-2 | 595
07-03 22:03:05.028 30616-30616/a D/check: --------------------------
07-03 22:03:05.028 30616-30616/a D/check: Print Itinerary_2
07-03 22:03:05.028 30616-30616/a D/check: INSIDE ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.028 30616-30616/a D/check: innerElement ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.029 30616-30616/a D/check: Madurai - Pillayarpatti - Pillayarpatti - Chennai | 14-114-114-2 | 560
07-03 22:03:05.029 30616-30616/a D/check: --------------------------
07-03 22:03:05.029 30616-30616/a D/check: Print Itinerary_3
07-03 22:03:05.029 30616-30616/a D/check: INSIDE ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.029 30616-30616/a D/check: innerElement ARRAY IS NOT EMPTY ITS HAVE A VALUE
07-03 22:03:05.029 30616-30616/a D/check: Madurai - Pillayarpatti - Pillayarpatti - Chennai | 14-114-114-2 | 560

答案 1 :(得分:0)

只需更改此行jsoninsidearray = object.getJSONArray("Itinerary_1");

即可

jsoninsidearray = object.getJSONArray("Itinerary_"+i);

答案 2 :(得分:0)

愿这会帮到你

JSONObject mainObj = = new JSONObject(response);

JSONArray Suggestionslist = mainObj.getJSONArray("Suggestions");
    if(Suggestionslist != null){

    for(int i = 0; i < Suggestionslist.length();i++){
             JSONObject elem = list.getJSONObject(i);
            if(elem != null){
                 JSONArray Itinerary = elem.getJSONArray("Itinerary_"+ (i+1));
                if(Itinerary != null){ 

                       for(int j = 0; j < Itinerary.length();j++){
                        JSONObject innerElem = Itinerary.getJSONObject(j);
                        if(innerElem != null){
                            String Cities = innerELem.getString("Cities");
                            String Citieids = innerElem.getString("Citieids");
                            String Kms = innerElem.getString("Kms");
                        }
                    }  

                 }
    }

}

答案 3 :(得分:0)

在这里你必须首先尝试创建jsonobject

JSONObject object = new JSONObject(json);  
JSONArray data = object.getJSONArray("Suggestions");   

        JSONObject obj1 = data.getJSONObject(0);

            JSONArray inner = obj1.getJSONArray("Itinerary_1");
            String Cities=inner.getString(0);
            String Citiesids=inner.getString(1);
            String Kms=inner.getString(2);
//and so on copy and change the name of Itinerary_*

}

答案 4 :(得分:0)

这是innerArray的完整解决方案

      if (status == 200) {
            HttpEntity entity = response.getEntity();
            String data = EntityUtils.toString(entity);



            JSONObject jsono = new JSONObject(data);
            JSONArray jarray = jsono.getJSONArray("Suggestions");

            System.out.println("====================///////////" + jarray);
            if (jarray != null) {
                for (int i = 0; i < jarray.length(); i++) {
                    JSONObject object = jarray.getJSONObject(i);


                    System.out.print("obj//////////" + object.length() + "\n");
                    int m;


                    for (int i1 = 1; i1 <= object.length(); i1++) {

                        System.out.println("inner======  inside second for loop  =====");

                        JSONArray jarray1 = object.getJSONArray("Itinerary_" + i1);

                        JSONObject object1 = jarray1.getJSONObject(i);

                        //JSONObject jsoninside = object.getJSONObject("Itinerary_"+ i1);

                        System.out.println("inner====================///////////\\\\" + object1);

                        if (object1 != null) {
                            citynames = object1.getString("Cities");
                            citykms = object1.getString("Kms");

                        } else {
                            Log.d("check", "INSIDE ARRAY IS EMPTY");
                        }


                    }

                    return true;
                }

            }
        } else {
            Log.d("check", "MAIN ARRAY IS EMPTY");
        }