我正在使用 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()
),您必须JsonValue
将JsonString
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
添加回答
举报
0/150
提交
取消