Как правильно разобрать этот JSON? - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть большой файл 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);

Поскольку я впервые работаю с файлом JSON в AndroidStudio / Java, я понятия не имею, что делать, чтобы получить штаты и города. Любая помощь с благодарностью.

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018

Уважение к попыткам сделать это самостоятельно, но мы живем в эпоху API. Проверьте библиотеку GSON от Google, она анализирует JSON для объектов Java, а объекты Java для JSON. Это один из самых полезных API. https://github.com/google/gson

0 голосов
/ 28 апреля 2018

Попробуйте это:

 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 голосов
/ 28 апреля 2018

Вы можете использовать библиотеку GSON. Просто создайте соответствующий объект java, который будет отражать структуру json, и делайте так:

MyClass data = new Gson().fromJson(json, MyClass.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...