使用 javax.json.stream.JsonParser 和 Java 流解析的 JSON

我正在使用 Java streams 解析从 REST 服务调用接收到的一些 JSON JsonParser.getObjectStream(),并过滤特定值,但从未得到我期望的匹配项。深入挖掘,我发现返回的字符串值在开头和结尾包含额外的双引号。


这里有一些代码来说明。首先,我展示了获取值的“直接”方法,然后是流方法。


package com.company.jsonptest;


import java.io.StringReader;

import javax.json.Json;

import javax.json.JsonObject;

import javax.json.stream.JsonParser;


public class GetStringTest {

    public static void main(String[] args) {

        System.out.println("Direct...");

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

        parser.next();

        JsonObject jsonObject = parser.getObject().asJsonObject();

        String username = jsonObject.getString("firstname");

        String name = jsonObject.getString("lastname");

        System.out.println("firstname: " + username);

        System.out.println("lastname: " + name);


        System.out.println("Streams...");

        JsonParser parser2 = Json.createParser(new StringReader(json));

        parser2.next();

        parser2.getObjectStream().forEach(entry -> {

            String key = entry.getKey();

            String value = entry.getValue().toString();

            String type = entry.getValue().getValueType().toString();

            System.out.println(key + ": " + value + " (" + type + ")");

        });

    }


    private static String json = "{\n"

        + "  \"firstname\": \"John\",\n"

        + "  \"lastname\": \"Smith\"\n"

        + "}";

}

这是输出。注意额外的引号。我将 JsonValue 类型作为额外检查包括在内。


Direct...

firstname: John

lastname: Smith


Streams...

firstname: "John" (STRING)

lastname: "Smith" (STRING)

有没有办法解决这个问题,除了增加一个额外的步骤来去掉引号?


慕无忌1623718
浏览 261回答 1
1回答

料青山看我应如是

问题是getObjectStream()只是将元素迭代为s,这会丢失第一种方法中的JsonValue键入方法。JsonObject最大的区别在于您使用toString()(它只返回 后面的 json“东西” :)而不是getString()(它将那个“东西”解释为一个字符串)。为了取回此信息(以及类似 的方法getString()),您必须JsonValue将JsonStringString value = ((JsonString) entry.getValue()).getString();这将返回不带引号的值。有关他们将搜索的元素转换为的示例,请参见此 Javadoc JsonArray:https://static.javadoc.io/javax.json/javax.json-api/1.1.0-M1/javax/json/stream/JsonParser.html
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java