猿问

获取 json 元素 URL 网络 bean

我正在尝试从 JSON URL 获取元素,但似乎没有任何效果。我试图创建一个对象来存储响应,然后访问它。它没有用。这是我的代码:


public class JavaApplication4 {


    public static void main(String[] args) {

        try {

            URL url = new URL("https://jsonplaceholder.typicode.com/todos/1");

            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

            String line;


            while ((line = in.readLine()) != null) {

                System.out.println(line);

            }

            in.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

这是运行该代码的输出:


{

  "userId": 1,

  "id": 1,

  "title": "delectus aut autem",

  "completed": false

}

我想获得各个键值。例如,我想获取“title”的值。


一只甜甜圈
浏览 79回答 1
1回答

牧羊人nacy

有几种第三方工具可以满足您的需求,但您也可以使用 Java EE 的Java API for JSON Processing(有时容易混淆地称为 JSON-P)来处理 URL 的 JSON 数据,而无需了解该数据的结构。这是代码,它使用 OP 中的代码作为起点:package com.unthreading;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.StringReader;import java.net.URL;import javax.json.Json;import javax.json.stream.JsonParser;public class App {&nbsp; &nbsp; public static void main(String[] args) throws IOException {&nbsp; &nbsp; &nbsp; &nbsp; StringBuilder jsonData = new StringBuilder();&nbsp; &nbsp; &nbsp; &nbsp; URL url = new URL("https://jsonplaceholder.typicode.com/todos/1");&nbsp; &nbsp; &nbsp; &nbsp; try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String line;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while ((line = br.readLine()) != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jsonData.append(line);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; new App().processUnknownJson(jsonData.toString());&nbsp; &nbsp; }&nbsp; &nbsp; private void processUnknownJson(String jsonData) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("jsonData:" + jsonData);&nbsp; &nbsp; &nbsp; &nbsp; JsonParser parser = Json.createParser(new StringReader(jsonData));&nbsp; &nbsp; &nbsp; &nbsp; while (parser.hasNext()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JsonParser.Event event = parser.next();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; switch (event) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case START_ARRAY:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case END_ARRAY:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case START_OBJECT:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case END_OBJECT:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case VALUE_FALSE:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case VALUE_NULL:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case VALUE_TRUE:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(event.toString());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case KEY_NAME:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.print(event.toString() + " " + parser.getString() + " - ");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case VALUE_STRING:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case VALUE_NUMBER:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(event.toString() + " " + parser.getString());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; default:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Unexpected event: " + event.toString());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}这是输出,显示从 URL 返回的 JSON 字符串,以及将该字符串解析为键/值对的结果:jsonData:{&nbsp; "userId": 1,&nbsp; "id": 1,&nbsp; "title": "delectus aut autem",&nbsp; "completed": false}START_OBJECTKEY_NAME userId - VALUE_NUMBER 1KEY_NAME id - VALUE_NUMBER 1KEY_NAME title - VALUE_STRING delectus aut autemKEY_NAME completed - VALUE_FALSEEND_OBJECT解析代码取自 Oracle 示例:Reading JSON Data Using a Parser。我使用以下命令将应用程序创建为一个简单的 Maven 项目pom.xml:<project xmlns="http://maven.apache.org/POM/4.0.0"&nbsp; &nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&nbsp; &nbsp; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">&nbsp; &nbsp; <modelVersion>4.0.0</modelVersion>&nbsp; &nbsp; <groupId>com.unthreading</groupId>&nbsp; &nbsp; <artifactId>myjsonparser</artifactId>&nbsp; &nbsp; <version>0.0.1-SNAPSHOT</version>&nbsp; &nbsp; <packaging>jar</packaging>&nbsp; &nbsp; <name>myjsonparser</name>&nbsp; &nbsp; <url>http://maven.apache.org</url>&nbsp; &nbsp; <properties>&nbsp; &nbsp; &nbsp; &nbsp; <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>&nbsp; &nbsp; &nbsp; &nbsp; <java.version>11</java.version>&nbsp; &nbsp; &nbsp; &nbsp; <maven.compiler.source>${java.version}</maven.compiler.source>&nbsp; &nbsp; &nbsp; &nbsp; <maven.compiler.target>${java.version}</maven.compiler.target>&nbsp; &nbsp; </properties>&nbsp; &nbsp; <dependencies>&nbsp; &nbsp; &nbsp; &nbsp; <!-- https://mvnrepository.com/artifact/javax.json/javax.json-api -->&nbsp; &nbsp; &nbsp; &nbsp; <dependency>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <groupId>javax.json</groupId>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <artifactId>javax.json-api</artifactId>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <version>1.1.4</version>&nbsp; &nbsp; &nbsp; &nbsp; </dependency>&nbsp; &nbsp; &nbsp; &nbsp; <dependency>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <groupId>org.glassfish</groupId>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <artifactId>javax.json</artifactId>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <version>[1.1.2,)</version>&nbsp; &nbsp; &nbsp; &nbsp; </dependency>&nbsp; &nbsp; </dependencies></project>
随时随地看视频慕课网APP

相关分类

Java
我要回答