【问题标题】:How do I properly parse this JSON?如何正确解析此 JSON?
【发布时间】:2018-10-09 02:50:51
【问题描述】:

我有一个包含国家、州和城市的大型 JSON 文件。 JSON 如下所示:

{
"Countries":[
        {
        "CountryName":"India",
        "States":[
                    {
                    "StateName":"Maharashtra",
                    "Cities":[
                            "Pune",
                            "Nagpur",
                            "Mumbai"
                              ]
                     },
                     {
                     "StateName":"Kerala",
                     "Cities":[
                                "Kochi",
                                "Munnar"
                              ]
                      }
                   ]
         },
         {
          "CountryName":"Australia",
          "States":[
                    {
                    "StateName":"Aukland",
                    "Cities":[
                            "GlenField",
                            "Henderson",
                                "MilFord"
                              ]
                     },
                     {
                     "StateName":"Melbourne",
                     "Cities":[
                                "Melbourne",
                                "South Oakleigh"
                              ]
                      }
                   ]
          }
       ]
  }

我的应用中有一项活动,要求用户选择一个国家/地区,在选择一个国家/地区后,我想将该国家/地区的所有州作为数组列表获取。而当一个特定的州被选中时,我想将该州的所有城市作为一个数组列表。

我可以使用此方法获得所有国家/地区的列表:

public void loadCountries(String parent, String child, ArrayList<String> listValue)
{
    try {
        JSONObject obj = new JSONObject(loadJSONFromAsset());
        JSONArray m_jArry = obj.getJSONArray(parent);;
        ArrayList<HashMap<String, String>> formList = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> m_li;

      //  listValue = new ArrayList<>();


        for (int i = 0; i < m_jArry.length(); i++) {
            JSONObject jo_inside = m_jArry.getJSONObject(i);
            Log.d("Details-->", jo_inside.getString(child));
            listValue.add(jo_inside.getString(child));
        }


    } catch (JSONException e) {
        e.printStackTrace();
    }
}

public String loadJSONFromAsset() {
    String json = null;
    try {
        InputStream is = getAssets().open("Contries.json");
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        json = new String(buffer, "UTF-8");
    } catch (IOException ex) {
        ex.printStackTrace();
        return null;
    }
    return json;
}

然后,在 onCreate 方法中,使用这一行给我一个数组列表中的所有国家

loadCountries("Countries", "CountryName", countries);

由于这是我第一次在 AndroidStudio/Java 中使用 JSON 文件,我不知道如何获取州和城市。非常感谢任何帮助。

【问题讨论】:

    标签: java json android-studio arraylist


    【解决方案1】:

    您可以使用 GSON 库。只需创建相应的反映 json 结构的 java 对象并在此处执行以下操作:

    MyClass data = new Gson().fromJson(json, MyClass.class);
    

    【讨论】:

      【解决方案2】:

      尊重自己尝试这样做,但我们生活在 API 时代。查看 Google 的 GSON 库,它将 JSON 解析为 java 对象,并将 java 对象解析为 JSON。它是最有用的 API 之一。 https://github.com/google/gson

      【讨论】:

        【解决方案3】:

        试试这个:

         Map<String, Map<String, Map<Integer, String>>> data = new HashMap<>();
        
                      try {
                        JSONObject object = new JSONObject(loadJSONFromAsset());
                        JSONArray countries = object.getJSONArray("Countries");
        
                        for (int i = 0; i < countries.length(); i++) {
        
                            JSONObject state = countries.getJSONObject(i);
                            JSONArray statesList = state.getJSONArray("States");
                            String countryName = countries.getJSONObject(i).getString("CountryName");
        
                            for (int j = 0; j < statesList.length(); j++) {
        
                                JSONObject city = statesList.getJSONObject(j);
                                JSONArray citiesList = city.getJSONArray("Cities");
                                String stateName = city.getString("StateName");
        
                                Map<String, Map<Integer, String>> stateHashMap = new HashMap<>();
        
                                for (int k = 0; k < citiesList.length(); k++) {
        
                                    cityList.add(citiesList.getString(k));
                                    String cityName = citiesList.getString(k);
        
                                    Map<Integer, String> cityHashmap = new HashMap<>();
                                    cityHashmap.put(k, cityName);
                                    stateHashMap.put(stateName, cityHashmap);
        
                                    data.put(countryName, stateHashMap);
        
                                }
                            }
                        }
        
        
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-24
          • 1970-01-01
          • 2022-11-21
          • 1970-01-01
          • 1970-01-01
          • 2016-07-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多