Как получить строковое значение из массива JSON?
Я знаю, что об этом спрашивали много раз, но ни одно из предложенных решений не работает в моем случае.
Вот мой JSON, который я получаю в ответ от веб-сервиса
{
"size": 1,
"_links": {
"context": "XXXX",
"self": "XXXXXX",
"base": "XXXXXX"
},
"start": 0,
"limit": 50,
"results": [
{
"container": {
"extensions": {
"position": "none"
},
"_links": {
"webui": "XXXX",
"tinyui": "XXXX",
"self": "XXXXXX"
},
"id": "XXXXX",
"type": "page",
"title": "XXXXX",
"_expandable": {
"container": "XXXXX",
"metadata": "",
"operations": "",
"children": "XXXX/child",
"history": "XXXX/history",
"ancestors": "",
"body": "",
"version": "",
"descendants": "XXXXX/descendant",
"space": "XXXXX"
},
"status": "current"
},
"metadata": {
"mediaType": "text/plain",
"comment": ""
},
"extensions": {
"fileSize": 8,
"mediaType": "text/plain",
"comment": ""
},
"_links": {
"download": "/download/attachments/XXXXX/MyData1.txt?version=1&modificationDate=1483652732000&api=v2",
"webui": "XXXXX",
"self": "XXXXX"
},
"id": "attXXXXXX",
"type": "attachment",
"title": "MyData1.txt",
"_expandable": {
"operations": "",
"children": "XXXX",
"history": "XXXXX",
"ancestors": "",
"body": "",
"descendants": "XXXXX",
"space": "XXXXX"
},
"version": {
"number": 1,
"minorEdit": false,
"by": {
"profilePicture": {
"path": "XXXXX",
"isDefault": true,
"width": 48,
"height": 48
},
"displayName": "XXXXX",
"type": "known",
"userKey": "XXXXX",
"username": "XXXXX"
},
"message": "",
"when": "2017-01-05T16:45:32.000-05:00"
},
"status": "current"
}
]
}
Мне нужно найти значение идентификатора, который является attXXXXXX, и вот мой код.
JSONObject page = new JSONObject(pageObj);
JSONArray jsonArray= page.getJSONArray("results");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject explrObject = jsonArray.getJSONObject(i);
}
Но вышеприведенный цикл просто запускается один раз, так как длина jsonArray равна 1. Все решения, представленные в других публикациях, одинаковы, т.е. итерируются по массиву json. Я что-то пропустил? Предложение?
2 ответа
Итак, я смог получить значение из ответа, используя Rest Assured API. Это простой API для получения значения из массива JSON. В основном я должен использовать следующую команду, чтобы получить значение
response.path("results.id");
Ваша строка JSON имеет только одно значение в объекте "results". Таким образом, ваш размер массива возвращается как 1. Что является правильным.
Если вы ожидаете более одного массива, проверьте код на стороне сервера, где построен JSON.
Обратитесь к изображению ниже для большего понимания.
Я не проверял это. Можешь попробовать это Если вы получили решение, пожалуйста, проголосуйте.
JSONObject page = new JSONObject(pageObj);
JSONArray jsonArray= page.getJSONArray("results");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject explrObject = jsonArray.getJSONObject(i);
explrObject.getString("id")
}