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

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

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

慕无忌1623718 2023-03-02 15:24:29
我正在使用 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: Johnlastname: SmithStreams...firstname: "John" (STRING)lastname: "Smith" (STRING)有没有办法解决这个问题,除了增加一个额外的步骤来去掉引号?
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

问题是getObjectStream()只是将元素迭代为s,这会丢失第一种方法中的JsonValue键入方法。JsonObject最大的区别在于您使用toString()(它只返回 后面的 json“东西” :)而不是getString()(它将那个“东西”解释为一个字符串)。

为了取回此信息(以及类似 的方法getString()),您必须JsonValueJsonString

String 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


查看完整回答
反对 回复 2023-03-02
  • 1 回答
  • 0 关注
  • 172 浏览

添加回答

举报

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