Как этот JSON Parsing Android бесконечных данных

Используемый мной API обеспечивает вывод в формате JSON. Как я могу разобрать его в студии Android? Я никогда раньше не видел такой распечатки JSON.

{
"market":   {
        "100": {
        "name": "forexample",
        "surname": "forexample2"
},
         "101": {
        "name": "forexample3",
        "surname": "forexample4"
},

.
.
.

 "999": {
        "name": "forexampleXX",
        "surname": "forexampleXX"
}
}
}

«101» продолжает увеличиваться на 1. Это будет слишком долго, чтобы проводить индивидуальную идентификацию. Какой самый короткий путь?

выложить полный JSON.

Ali Ahmed 30.10.2018 07:18

что в этом странного?

Henry 30.10.2018 07:19

Возможный дубликат Как разобрать JSON в Android?

Gautam Chibde 30.10.2018 07:20

это просто объект внутри объекта

vikrant arankalle 30.10.2018 07:22

Преобразуйте "рыночный" JsonObject в JSONArray. Стало легче.

Abhay Koradiya 30.10.2018 07:22

«101» продолжает увеличиваться на 1. Это будет слишком долго, чтобы проводить индивидуальную идентификацию. Какой самый короткий путь?

Bill 30.10.2018 07:26

Измените свой рыночный объект на массив.

Syed Hamza Hassan 30.10.2018 07:31

@Bill, у вас есть код обратной стороны для json-ответа?

Syed Hamza Hassan 30.10.2018 07:50

@Bill, я обновил ответ, вы можете получить все значения из своего объекта json.

Syed Hamza Hassan 30.10.2018 11:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
9
171
4

Ответы 4

This is how you get data from your desired Object

    JSONObject json= new JSONObject();
    json = response.getJSONObject("market");
    Iterator<String> iter = json.keys();//here you get 100,101,102 ....without accessing individually
    while (iter.hasNext()) {
    String key = iter.next();
    try {
        Object value = json.get(key);//Here you get you object values
    } catch (JSONException e) {
        // Something went wrong!
    }
    }

Дальнейшие подробности читайте здесь

Не стесняйтесь спрашивать, если что-то непонятно.

«101» продолжает увеличиваться на 1. Это будет слишком долго, чтобы проводить индивидуальную идентификацию. Какой самый короткий путь?

Bill 30.10.2018 07:25

Кратчайший способ @Bill - изменить ответ json и сделать его массивом json

Vivek Mishra 30.10.2018 07:25

Как мне определить «101» для создания массива json?

Bill 30.10.2018 07:27

@Bill, да, один из способов - изменить свой ответ на массив Json, иначе вам нужно следовать шаблону до определенного числа, то есть в вашем случае это от 100-999, но помните, если ваш ответ изменится в какой-либо момент, он выйдет из строя.

Syed Hamza Hassan 30.10.2018 07:28

@Bill вам не нужно определять 101 в массиве, вы можете получить доступ к массиву с позицией

Vivek Mishra 30.10.2018 07:39

@VivekMishra так, как оно будет? ты можешь коротко поговорить?

Bill 30.10.2018 07:46

да @VivekMishra предполагает, что в массиве вам не нужно обращаться к позиции по имени, пока это объект, который вам требуется для этого.

Syed Hamza Hassan 30.10.2018 07:46

Ваш "рыночный" JSON должен быть JSONArray. Покажите, что вы можете использовать контент с index.

Измените вывод API. Нравиться,

{
"market":   [
         {
        "name": "forexample",
        "surname": "forexample2"
         },

         {
        "name": "forexample3",
        "surname": "forexample4"
         },

.
.
.

    {
        "name": "forexampleXX",
        "surname": "forexampleXX"
    }
 ]
}

Извините, я не могу изменить вывод API. Есть другой способ?

Bill 30.10.2018 07:32

С какой проблемой вы столкнулись при изменении вывода? Потому что это единственный действенный способ.

Abhay Koradiya 30.10.2018 07:33

Вы можете использовать https://github.com/google/gson. И преобразуйте json во что-то вроде

HashMap<String,HashMap<String,Person>> map

Эта статья может помочь в разборе этого типа - Десериализация универсальных типов с помощью GSON

Человек будет классом с именем и фамилией. Сначала получите ключи первого уровня. -> map.keySet (), и для каждой новой хэш-карты получить ключ следующего уровня. Что-то вроде

for (String key: map.keySet()) {
 HashMap < String, Person > personMap = map.get(key);
 for (String personKey: personMap() {
   Person person = map.get(personKey);
   // do what you want with the person object
  }
 }

Вы можете использовать библиотеку GSON, это очень известная библиотека добавь это вот так

implementation 'com.google.code.gson:gson:2.8.2'

тогда вы можете разобрать это так

Market market = new Gson().fromJson( jsonString , Market.class);

где будет Market Class

public class Market {
     public HashMap<Integer ,  User > result ;
}

А ТАКЖЕ

public class User{ 
    public String name ;
    public String surname ;
}

Или вы можете разобрать его без такого класса

HashMap<String,HashMap<String, User>>  result = gson.fromJson( jsonString , new TypeToken<HashMap<String,HashMap<String, User>>>() {
                        }.getType());

Надеюсь, это поможет вам @Bill.

Другие вопросы по теме