Java разбирает JSON из URL NullPointerException - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь проанализировать JSON из следующего API: https://opentdb.com/api.php?amount=1

, но когда я пытаюсь получить значение вопроса, я получаю следующую ошибку:

Exception in thread "main" java.lang.NullPointerException

Я использую этот код:

public static void main(String[] args) throws IOException {
    String question;
    String sURL = "https://opentdb.com/api.php?amount=1"; //just a string

    // Connect to the URL using java's native library
    URL url = new URL(sURL);
    URLConnection request = url.openConnection();
    request.connect();

    // Convert to a JSON object to print data
    JsonParser jp = new JsonParser(); //from gson
    JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //Convert the input stream to a json element
    JsonObject rootobj = root.getAsJsonObject(); //May be an array, may be an object.
    question = rootobj.get("question").getAsString(); //grab the question

}

Надеюсь, кто-то может сказать мне, что я делаю неправильно.

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 11 июня 2018

Когда я смотрю на JSON, который вы пытаетесь интерпретировать, я получаю:

{
    "response_code": 0,
    "results":[
        {
            "category": "Entertainment: Board Games",
            "type": "multiple",
            "difficulty": "medium",
            "question": "Who is the main character in the VHS tape included in the board game Nightmare?",
            "correct_answer": "The Gatekeeper",
            "incorrect_answers":["The Kryptkeeper","The Monster","The Nightmare"]
        }
    ]
}

Этот JSON не содержит корневого члена "question".Это заставляет rootobj.get("question") return null, и, следовательно, вызов getAsString для него приводит к NullPointerException.

Так что вместо rootobj.get("question") вам придется пройти по иерархии: "results" -> первый член массива -> "question":

rootobj.getAsJsonArray("result").getAsJsonObject(0).get("question")
0 голосов
/ 11 июня 2018

Попробуйте это

question = rootobj.getAsJsonArray ("results"). Get (0) .getAsJsonObject (). Get ("question"). GetAsString ();

0 голосов
/ 11 июня 2018

JSON не имеет прямого поля «вопрос».звоните question = rootobj.get("result").get(0).get("question").getAsString(); вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...