首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确解析此JSON?

问如何正确解析此JSON?
EN

Stack Overflow用户
提问于 2018-04-28 19:55:45
回答 3查看 481关注 0票数 0

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

代码语言:javascript
复制
{
"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"
                              ]
                      }
                   ]
          }
       ]
  }

我在我的应用程序中有一个活动,要求用户选择一个国家,当选择一个国家时,我想以数组列表的形式获得该国家的所有州。当选择一个特定的州时,我想以数组列表的形式获取该州的所有城市。

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

代码语言:javascript
复制
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方法中,使用下面这行代码给出数组列表中的所有国家/地区

代码语言:javascript
复制
loadCountries("Countries", "CountryName", countries);

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

EN

回答 3

Stack Overflow用户

发布于 2018-04-28 19:59:56

你可以使用GSON库。只需创建相应的反映json结构的java对象,如下所示:

代码语言:javascript
复制
MyClass data = new Gson().fromJson(json, MyClass.class);
票数 2
EN

Stack Overflow用户

发布于 2018-04-28 20:00:25

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

票数 1
EN

Stack Overflow用户

发布于 2018-04-28 21:00:00

试试这个:

代码语言:javascript
复制
 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();
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50076283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档