JSON парсинг в Android

279
14 июня 2017, 01:01

Имеется код от https://restcountries.eu/rest/v2/all

Чтобы было понятно, вот JSON к каждой стране:

[
  {
  "name": "Afghanistan",
  "topLevelDomain": [".af"],
  "alpha2Code": "AF",
  "alpha3Code": "AFG",
  "callingCodes": ["93"],
  "capital": "Kabul",
  "altSpellings": ["AF", "Afġānistān"],
  "region": "Asia",
  "subregion": "Southern Asia",
  "population": 27657145,
  "latlng": [33.0, 65.0],
  "demonym": "Afghan",
  "area": 652230.0,
  "gini": 27.8,
  "timezones": ["UTC+04:30"],
  "borders": ["IRN", "PAK", "TKM", "UZB", "TJK", "CHN"],
  "nativeName": "افغانستان",
  "numericCode": "004",
  "currencies": [{
   "code": "AFN",
   "name": "Afghan afghani",
   "symbol": "؋"
  }],
  "languages": [{
   "iso639_1": "ps",
   "iso639_2": "pus",
   "name": "Pashto",
   "nativeName": "پښتو"
  }, {
   "iso639_1": "uz",
   "iso639_2": "uzb",
   "name": "Uzbek",
   "nativeName": "Oʻzbek"
  }, {
   "iso639_1": "tk",
   "iso639_2": "tuk",
   "name": "Turkmen",
   "nativeName": "Türkmen"
  }],
  "translations": {
   "de": "Afghanistan",
   "es": "Afganistán",
   "fr": "Afghanistan",
   "ja": "アフガニスタン",
   "it": "Afghanistan",
   "br": "Afeganistão",
   "pt": "Afeganistão"
  },
  "flag": "https://restcountries.eu/data/afg.svg",
  "regionalBlocs": [{
     "acronym": "SAARC"

Беда в том, что отсутствует JsonArray.

Мой полный код:

public class MainActivity extends AppCompatActivity {
    public MainActivity() throws MalformedURLException {
    }
    private TextView tvData;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnHit = (Button) findViewById(R.id.btnHit);
        tvData = (TextView)findViewById(R.id.tvJsonItem);
        btnHit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new JSONTask().execute("https://restcountries.eu/rest/v2/all");
            }
        });}
    public class JSONTask extends AsyncTask<String,String, String >{
        @Override
        protected String doInBackground(String... params) {
            HttpsURLConnection connection = null;
            BufferedReader reader = null;
            try {
                URL url = new URL(params[0]);
                connection = (HttpsURLConnection) url.openConnection();
                connection.connect();
                InputStream stream = connection.getInputStream();
                reader = new BufferedReader(new InputStreamReader(stream));
                StringBuffer buffer = new StringBuffer();
                String line = "";
                while ((line = reader.readLine()) != null) {
                    buffer.append(line);
                }
//вот тут начинается проблема:
                String finalJson = buffer.toString();
                JSONObject parentObject = new JSONObject(finalJson);
                JSONArray parentArray = parentObject.getJSONArray("languages");
                JSONObject finalObject = new JSONObject();
                String info1 = finalObject.getString("iso639_1");
                String info2 = finalObject.getString("iso639_2");
                String info3 = finalObject.getString("name");
                String info4 = finalObject.getString("nativeName");
//даже если прописать languages как array, то по итогу приложение ничего не отображает.
                return info1 + " " + info2 + " " + info3 + " " + info4;
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            } finally {
                if (connection != null) connection.disconnect();
                try {
                    if (reader != null) reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return null;
        };
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            tvData.setText(result);
        }
    }
}

Каким образом его запарсить правильно?

READ ALSO
Spring HATEOAS как получить HAL ?

Spring HATEOAS как получить HAL ?

Данные методы возвращают на клиент ответ с Content-type json , но мне нужен HAL или HAL + JSON

227
Проверка на наличие объекта в базе данных

Проверка на наличие объекта в базе данных

Как оптимальнее проверить при сохранении - есть ли уже объект в базе данных? Подойдет ли код:

226
Добавление значений в LinkedHashMap&lt;Integer, ArrayList&gt;

Добавление значений в LinkedHashMap<Integer, ArrayList>

Как добавлять элементы в ArrayList?

298
редактирование non-public классов

редактирование non-public классов

Начал изучать Java и наткнулся на то, что не могу редактировать некоторые классы в Android StudioПытаюсь расковырять некоторые проекты с гитхаба

230