Не удается получить значение из данных JSON — YouTube API —

#java #android #json #youtube

#java #Android #json #YouTube

Вопрос:

Я пытаюсь получить значение из данных json (API YouTube V3).

 String jsonText = readFromUrl(channerUrl);// channerUrl = Youtube V3 API Link

JSONObject json = new JSONObject(jsonText);

System.out.println(json.getString("videoId"));
  

Но у меня есть это в моем журнале :

 I/System.out: org.json.JSONException: No value for videoId
  

Данные с YouTube :

 {
 "kind": "youtube#playlistItemListResponse",
 "etag": ""xxxx"",
 "nextPageToken": "xxx",
 "pageInfo": {
  "totalResults": 321,
  "resultsPerPage": 1
 },
     "items": [
      {
       "kind": "youtube#playlistItem",
       "etag": ""xxxx"",
       "id": "xxxx",
       "contentDetails": {
        "videoId": "The Value Want"
       }
      }
     ]
}
  

Почему у меня есть No value for videoId ?
Спасибо

РЕДАКТИРОВАТЬ (тоже не сработало): (jsonText) — это ссылка на данные JSON

  JSONObject json = new JSONObject(jsonText);


        List<String> list = new ArrayList<String>();
        JSONArray array = json.getJSONArray("items");
        for(int i = 0 ; i < array.length() ; i  ){
            list.add(array.getJSONObject(i).getString("contentDetails"));
            System.out.println(json.getString("contentDetails"));
        }
  

Ответ №1:

Потому videoId что находится под items объектом. item Сначала получить, затем получить его first child , а затем videoId

Редактировать: использовать

 array.getJSONObject(i).getJSONObject("contentDetails").getString("videoId")
  

И удалите println строку

Затем вне цикла просто распечатайте список, содержащий videoId

Комментарии:

1. Хорошо, так videoID в contentDetails том, кто в items ? Как я могу получить item первое?

2. Найдите методы GetObject и getArray и используйте их

3. Я отредактировал свой первый пост, я попробовал использовать методы getArray, но это тоже не сработало

Ответ №2:

используйте этот код :

  JSONObject json = new JSONObject(jsonText);


            List<String> list = new ArrayList<String>();
            JSONArray array = null;
            try {
                array = json.getJSONArray("items");
            } catch (JSONException e) {
                e.printStackTrace();
            }
            for(int i = 0 ; i < array.length() ; i  ){
                // list.add(array.getJSONObject(i).getString("contentDetails"));
                try {
                    System.out.println(array.getJSONObject(i).getJSONObject("contentDetails").getString("videoId"));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
  

Ответ №3:

 try
    {
        JSONObject mJsonObject = new JSONObject(strValue);
        JSONArray items = mJsonObject.getJSONArray("items");
        String nextToken = mJsonObject.getString("nextPageToken").toString();

        for(int i = 0;i<items.length();i  )
        {

            JSONObject snipetts = items.getJSONObject(i);
            JSONObject snipet = snipetts.getJSONObject("snippet");
            JSONObject thumbnails = snipet.getJSONObject("thumbnails");
            JSONObject highImage = thumbnails .getJSONObject("high");

            String title = snipet.get("title").toString();
            String urlImage = highImage.get("url").toString();
            String videoID = snipetts.getString("id");
            String description = snipet.getString("description");
            String publishDate = snipet.getString("publishedAt");

        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }