Используемый мной API обеспечивает вывод в формате JSON. Как я могу разобрать его в студии Android? Я никогда раньше не видел такой распечатки JSON.
{
"market": {
"100": {
"name": "forexample",
"surname": "forexample2"
},
"101": {
"name": "forexample3",
"surname": "forexample4"
},
.
.
.
"999": {
"name": "forexampleXX",
"surname": "forexampleXX"
}
}
}
«101» продолжает увеличиваться на 1. Это будет слишком долго, чтобы проводить индивидуальную идентификацию. Какой самый короткий путь?
что в этом странного?
Возможный дубликат Как разобрать JSON в Android?
это просто объект внутри объекта
Преобразуйте "рыночный" JsonObject в JSONArray. Стало легче.
«101» продолжает увеличиваться на 1. Это будет слишком долго, чтобы проводить индивидуальную идентификацию. Какой самый короткий путь?
Измените свой рыночный объект на массив.
@Bill, у вас есть код обратной стороны для json-ответа?
@Bill, я обновил ответ, вы можете получить все значения из своего объекта json.




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 - изменить ответ json и сделать его массивом json
Как мне определить «101» для создания массива json?
@Bill, да, один из способов - изменить свой ответ на массив Json, иначе вам нужно следовать шаблону до определенного числа, то есть в вашем случае это от 100-999, но помните, если ваш ответ изменится в какой-либо момент, он выйдет из строя.
@Bill вам не нужно определять 101 в массиве, вы можете получить доступ к массиву с позицией
@VivekMishra так, как оно будет? ты можешь коротко поговорить?
да @VivekMishra предполагает, что в массиве вам не нужно обращаться к позиции по имени, пока это объект, который вам требуется для этого.
Ваш "рыночный" JSON должен быть JSONArray. Покажите, что вы можете использовать контент с index.
Измените вывод API. Нравиться,
{
"market": [
{
"name": "forexample",
"surname": "forexample2"
},
{
"name": "forexample3",
"surname": "forexample4"
},
.
.
.
{
"name": "forexampleXX",
"surname": "forexampleXX"
}
]
}
Извините, я не могу изменить вывод API. Есть другой способ?
С какой проблемой вы столкнулись при изменении вывода? Потому что это единственный действенный способ.
Вы можете использовать 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.
выложить полный
JSON.