Java从URL NullPointerException解析JSON

kri*_*fer 2 java parsing json nullpointerexception

我正在尝试从以下API解析JSON:https: //opentdb.com/api.php?amount = 1

但是当我试图获取问题值时,我收到以下错误:

Exception in thread "main" java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)

我用这个代码:

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

}
Run Code Online (Sandbox Code Playgroud)

希望有人能告诉我我做错了什么.

提前致谢!

Wag*_*ili 7

当我看到你试图解释的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"]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

此JSON不包含根成员"question".这使得rootobj.get("question")返回null,因此调用getAsString它会抛出NullPointerException.

因此rootobj.get("question"),您将不得不遍历层次结构:"results"- >第一个数组成员 - > "question":

rootobj.getAsJsonArray("result").getAsJsonObject(0).get("question")
Run Code Online (Sandbox Code Playgroud)