org.json.JSONException: JSONObject[“first_name”] not found

396
02 марта 2017, 23:09

Нужно получить следующие данные и сохранить их в массивах строк/цифр (не просто вывод в консоль):

first_name
last_name
id

Мой не работающий код : (не нужно говорить,что я не объявил массив строк и т.д.,просто я уже пытался построчно выводить) укажите на ошибку и что нужно сделать.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import org.json.JSONException;
import org.json.JSONObject;

public class ListFriend{
    public void getFriendList()  throws IOException, JSONException{
            StringBuilder sb = new StringBuilder();
        URL pageURL = new URL("https://api.vk.com/method/friends.get?user_id=275388012&order=hints&fields=nickname&v=5.62");
        URLConnection uc = pageURL.openConnection();
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(
                        uc.getInputStream()))) {
            String inputLine;
            while ((inputLine = br.readLine()) != null) {
                sb.append(inputLine);
            }
        }
        System.out.println(sb);
        System.out.println();
        razbienie(sb);
    }
    public void razbienie(StringBuilder sb) throws JSONException {
      JSONObject obj = new JSONObject(sb);
      String first_name = obj.getString("first_name");
      String last_name = obj.getString("last_name");
      int id = obj.getString("id");
      System.out.println("first_name = " + first_name);
      System.out.println("last name = " +  last_name);
    }
}

JSON, который выдается при запросе на сервер

{"response":{"count":35,"items":[{"id":58853308,"first_name":"Екатерина","last_name":"Романенко","nickname":"","hidden":1},
{"id":92384521,"first_name":"Блум","last_name":"Каллен","nickname":""}, 
{"id":141630662,"first_name":"Євгеній","last_name":"Нікітін","nickname":""},
{"id":158114945,"first_name":"Антон","last_name":"Яремич","nickname":"","hidden":1},
{"id":167752831,"first_name":"Марат","last_name":"Зимнуров","nickname":"Фаридович"},
{"id":178618907,"first_name":"Андрей","last_name":"Громов","nickname":"๖ۣۣۜ"},
{"id":232515930,"first_name":"Учиха","last_name":"Саске","nickname":"————————————————————————————————  Sasuke Uchiha うちはサスケ————————————————————————————————"},
{"id":242936466,"first_name":"Настя","last_name":"Кот","nickname":""},
{"id":245151135,"first_name":"Клара","last_name":"Освальд","nickname":"Освин"},
{"id":248699422,"first_name":"Vanessa","last_name":"Howard","nickname":""},
{"id":252970419,"first_name":"Feliks","last_name":"Gallagher","nickname":""},
{"id":266353969,"first_name":"Яна","last_name":"Тян","nickname":""},
{"id":272587569,"first_name":"Draco","last_name":"Malfoy","nickname":"ㅤ✕ㅤ"},
{"id":281532057,"first_name":"Мира","last_name":"Котова","nickname":"","hidden":1},
{"id":286130542,"first_name":"Robin","last_name":"Taurus","nickname":""},
{"id":296629802,"first_name":"Илья","last_name":"Пак","nickname":""},
{"id":298724313,"first_name":"Роза","last_name":"Тайлер","nickname":""},
{"id":300437436,"first_name":"Мария","last_name":"Моторина","nickname":"","hidden":1},
{"id":301459494,"first_name":"Анастасия","last_name":"Шпагина","nickname":"","hidden":1},
{"id":304482617,"first_name":"Карен","last_name":"Маргарян","nickname":""},{"id":306697175,"first_name":"Sasori","last_name":"Akasuna","nickname":"","hidden":1},
{"id":311020741,"first_name":"Ашия","last_name":"Широ","nickname":""},
{"id":316797280,"first_name":"Катя","last_name":"Лис","deactivated":"deleted"},{"id":317117522,"first_name":"Liam","last_name":"Miles","nickname":""},
{"id":319762242,"first_name":"Виктория","last_name":"Перепечай","nickname":""},{"id":322714403,"first_name":"Anya","last_name":"Melnuk","nickname":""},
{"id":326762691,"first_name":"Бог","last_name":"Ято","nickname":""},
{"id":333275627,"first_name":"Yamada","last_name":"Ryuu","nickname":""},
{"id":335276627,"first_name":"Рита","last_name":"Шульц","nickname":""},{"id":335382804,"first_name":"Фокси","last_name":"Фазбер","nickname":""},
{"id":336884195,"first_name":"Наталия","last_name":"Линдеманн","nickname":""},{"id":342170161,"first_name":"Ики","last_name":"Хиёри","deactivated":"deleted"},
{"id":348565801,"first_name":"Ким","last_name":"Ён-Лин","nickname":""},
{"id":349657939,"first_name":"Саша","last_name":"Агафонова","nickname":""},
{"id":350555892,"first_name":"Слава","last_name":"Моисеев","nickname":""}]}}

Ошибки :

 Exception in thread "main" org.json.JSONException: JSONObject["first_name"] not found.
    at org.json.JSONObject.get(JSONObject.java:498)
at org.json.JSONObject.getString(JSONObject.java:669)
 at vkmail.ListFriend.razbienie(ListFriend.java:34)
 at vkmail.ListFriend.getFriendList(ListFriend.java:28)
 at vkmail.Main.main(Main.java:16)
C:\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
СБОРКА ЗАВЕРШЕНА СО СБОЕМ (общее время: 1 секунда)
Answer 1
  1. Необходимо передавать в конструкор JSONObject строку (String), а не StringBuilder, т.е. new JSONObject(sb.toString()), иначе используется конструктор JSONObject(Object);
  2. далее нужно получить объект по ключу "response"
  3. потом получить из него массив по ключу "items"
  4. и потом уже делать итерации по этому объекту

    JSONObject jsonObject = new JSONObject(sb.toString());
    JSONArray jsonArray = jsonObject
            .getJSONObject("response").getJSONArray("items");
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject obj = jsonArray.getJSONObject(i);
        String first_name = obj.getString("first_name");
        String last_name = obj.getString("last_name");
        int id = obj.getInt("id");
    }
    
READ ALSO
Сохранение настроек приложения

Сохранение настроек приложения

Подскажите пожалуйста, с помощью каких инструментов можно реализовать сохранение настроек приложения в самом файле приложения? Например...

202
Почему не идёт запись в файл?

Почему не идёт запись в файл?

Почему не заполняется файл, и что значат строки writerwrite('\r'); и writer

219
Отображение BLOB в Vaadin Grid

Отображение BLOB в Vaadin Grid

Приветствую! Ситуация такая - есть БД Оракл, в нем таблица Worker, в ней фото рабочих в формате BLOBНеофходимо отобразить в Vaadin Grid вместе с остальными...

354
Ошибка java.lang.IllegalArgumentException: No view found for id

Ошибка java.lang.IllegalArgumentException: No view found for id

Есть три страницы наследованные от Fragment

830