Как получить строковое значение из массива 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")
}
Другие вопросы по тегам