gpt4 book ai didi

java - 使用 javax.json.stream.JsonParser 和 Java 流解析的 JSON 字符串值的额外引号

转载 作者:行者123 更新时间:2023-11-30 01:48:43 26 4
gpt4 key购买 nike

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

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

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)

除了添加额外的步骤来去掉引号之外,还有其他方法可以解决这个问题吗?

最佳答案

问题在于 getObjectStream() 只是将元素迭代为 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

关于java - 使用 javax.json.stream.JsonParser 和 Java 流解析的 JSON 字符串值的额外引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56865763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com