Как распарсить json файл в android?

280
25 октября 2017, 03:23

Пример кода из файла(сначала идет описание города, потом идет описание станций в этом городе):

{
  "citiesFrom" : [
    {
      "countryTitle" : "Австрия",
      "point" : {
        "longitude" : 16.36879539489746,
        "latitude" : 48.20253753662109
      },
      "districtTitle" : "",
      "cityId" : 2352,
      "cityTitle" : "Вена",
      "regionTitle" : "",
      "stations" : [
        {
          "countryTitle" : "Австрия",
          "point" : {
            "longitude" : 16.36879539489746,
            "latitude" : 48.20253753662109
          },
          "districtTitle" : "",
          "cityId" : 2352,
          "cityTitle" : "город Вена",
          "regionTitle" : "",
          "stationId" : 10154,
          "stationTitle" : "International Busterminal, Edbergstarsse 200 A"
        },
        {
          "countryTitle" : "Австрия",
          "point" : {
            "longitude" : 16.36879539489746,
            "latitude" : 48.20253753662109
          },
          "districtTitle" : "",
          "cityId" : 2352,
          "cityTitle" : "город Вена",
          "regionTitle" : "",
          "stationId" : 9864,
          "stationTitle" : "Stadion Center, Engerthstr. 242"
        },
        {
          "countryTitle" : "Австрия",
          "point" : {
            "longitude" : 16.36879539489746,
            "latitude" : 48.20253753662109
          },
          "districtTitle" : "",
          "cityId" : 2352,
          "cityTitle" : "город Вена",
          "regionTitle" : "",
          "stationId" : 9778,
          "stationTitle" : "Stadion Center, Olympiaplatz 2"
        },
        {
          "countryTitle" : "Австрия",
          "point" : {
            "longitude" : 16.36879539489746,
            "latitude" : 48.20253753662109
          },
          "districtTitle" : "",
          "cityId" : 2352,
          "cityTitle" : "город Вена",
          "regionTitle" : "",
          "stationId" : 434,
          "stationTitle" : "U-BHF ERDBERGSTR."
        },
        {
          "countryTitle" : "Австрия",
          "point" : {
            "longitude" : 16.36879539489746,
            "latitude" : 48.20253753662109
          },
          "districtTitle" : "",
          "cityId" : 2352,
          "cityTitle" : "город Вена",
          "regionTitle" : "",
          "stationId" : 874,
          "stationTitle" : "Vienna"
        }
      ]
    }
  ]
  }
Answer 1

Как верно подметили в комментариях, сложного в парсинге JSON-а ничего нет, и примеров на эту тему тоже достаточно. Вам нужно просто понять принцип, как работать с JSON-ом, и далее для вас не составит никакой трудности распарсить сколь угодно сложный JSON.

Лично я советую использовать библиотеку org.json, с ней работать гораздо проще, чем с GSON или некоторыми другими примерами. Но этот вопрос довольно субъективен.

Конкретно на вашем примере:

// Допустим, в этой строке у вас находится весь ваш JSON
// Как вы его туда поместите, это уже другой вопрос
// И, надеюсь, трудностей у вас с этим не будет
String jsonString = "";
// Парсим JSON
JSONObject json = new JSONObject(jsonString);
JSONArray citiesFrom = json.getJSONArray("citiesFrom");
JSONObject country = citiesFrom.getJSONObject(0);
String countryTitle = country.getString("countryTitle");
JSONArray stations = country.getJSONArray("stations");
JSONObject firstStation = stations.getJSONObject(0);
String firstStationTitle = firstStation.getString("stationTitle"); 
// International Busterminal, Edbergstarsse 200 A
// и так далее...
Answer 2

Если честно - странный JSON с кучей дублирования. Вы можете использовать тот же GSON для первичного парсинга данных, затем, если судить по приведенному примеру, я бы создал два POJO класса Cities и Station которые бы создавал и заполнял данными во время парсинга. Таким образом вы бы написали свой десериализатор из JSON в Java объекты.

READ ALSO
Сортировка методом пузырька

Сортировка методом пузырька

Нужно создать сортировку массива методом пузырька, когда пузырек "тонет" (с конца массива до начала, НЕ сортировка по убыванию) В чем проблема?...

214
Модификация Jira с помощью api/rest api

Модификация Jira с помощью api/rest api

ЗдравствуйтеНужно поизучать Jira и возможности работы с ней из вне

207
Вопрос по C# OpenQA.Selenium

Вопрос по C# OpenQA.Selenium

Как собрать все значение data-url="/af54359643" используя OpenQASelenium ? Пытаюсь разобраться в документации, там есть метод FindElements, но судя по всему, он значения...

341
Почему не работают массивы в LINQ to entities

Почему не работают массивы в LINQ to entities

Есть метод в контроллере, который фильтрует содержимое

227