为了账号安全,请及时绑定邮箱和手机立即绑定

获取 json 元素 URL 网络 bean

获取 json 元素 URL 网络 bean

一只甜甜圈 2022-06-23 17:50:36
我正在尝试从 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”的值。
查看完整描述

1 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

有几种第三方工具可以满足您的需求,但您也可以使用 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 {


    public static void main(String[] args) throws IOException {

        StringBuilder jsonData = new StringBuilder();

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


        try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));) {

            String line;

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

                jsonData.append(line);

            }

        }

        new App().processUnknownJson(jsonData.toString());

    }


    private void processUnknownJson(String jsonData) {

        System.out.println("jsonData:" + jsonData);

        JsonParser parser = Json.createParser(new StringReader(jsonData));

        while (parser.hasNext()) {

            JsonParser.Event event = parser.next();

            switch (event) {

            case START_ARRAY:

            case END_ARRAY:

            case START_OBJECT:

            case END_OBJECT:

            case VALUE_FALSE:

            case VALUE_NULL:

            case VALUE_TRUE:

                System.out.println(event.toString());

                break;

            case KEY_NAME:

                System.out.print(event.toString() + " " + parser.getString() + " - ");

                break;

            case VALUE_STRING:

            case VALUE_NUMBER:

                System.out.println(event.toString() + " " + parser.getString());

                break;

            default:

                System.out.println("Unexpected event: " + event.toString());

            }

        }

    }

}

这是输出,显示从 URL 返回的 JSON 字符串,以及将该字符串解析为键/值对的结果:


jsonData:{  "userId": 1,  "id": 1,  "title": "delectus aut autem",  "completed": false}

START_OBJECT

KEY_NAME userId - VALUE_NUMBER 1

KEY_NAME id - VALUE_NUMBER 1

KEY_NAME title - VALUE_STRING delectus aut autem

KEY_NAME completed - VALUE_FALSE

END_OBJECT

解析代码取自 Oracle 示例:Reading JSON Data Using a Parser。


我使用以下命令将应用程序创建为一个简单的 Maven 项目pom.xml:


<project xmlns="http://maven.apache.org/POM/4.0.0"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.unthreading</groupId>

    <artifactId>myjsonparser</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <packaging>jar</packaging>

    <name>myjsonparser</name>

    <url>http://maven.apache.org</url>

    <properties>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <java.version>11</java.version>

        <maven.compiler.source>${java.version}</maven.compiler.source>

        <maven.compiler.target>${java.version}</maven.compiler.target>

    </properties>

    <dependencies>

        <!-- https://mvnrepository.com/artifact/javax.json/javax.json-api -->

        <dependency>

            <groupId>javax.json</groupId>

            <artifactId>javax.json-api</artifactId>

            <version>1.1.4</version>

        </dependency>

        <dependency>

            <groupId>org.glassfish</groupId>

            <artifactId>javax.json</artifactId>

            <version>[1.1.2,)</version>

        </dependency>

    </dependencies>

</project>


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信