gpt4 book ai didi

java - 使用 JSONP 浏览 json,数字可以作为 JsonObject 返回吗?

转载 作者:行者123 更新时间:2023-12-02 12:34:39 26 4
gpt4 key购买 nike

我正在编写一个函数,通过给定坐标的 json 进行导航。例如:

{
"a": {
"b" : "c"
},
"d": {
...
}
}

如果我打电话

NavigateThroughJson("a.b", myJsonObject)

我应该得到"c"作为输出。我这样做是因为我无法使用反序列化,json 具有任意格式。这是我的功能:

public JsonValue NavigateThroughJson(String coordinates, JsonObject jsonObject) {
JsonObject o = jsonObject;
String[] nodes = coordinates.split("\\.");//Splits the dot
for (String node: nodes) {
node = node.replace("\"", ""); //Removes "" from the keys
o = o.getJsonObject(node);
}
return o;
}

问题是,当我尝试以下 json 时(并调用 NavigateThroughJson("high", jsonAbove)):

{"high":7999.0,"vol":1261.83821469,"buy":7826.01,"last":7884.0,...}

没有返回任何内容,就像 o.getJsonObject(...)什么也没返回,甚至没有 null .

我认为发生这种情况是因为“high”指向一个数字,而不是像high: {...}这样的真正的json对象。 ,即使一致的库应该返回 7999.0作为带有 Type 的 JsonObject Number 。如您所见,JsonObject实现JsonValue ,可以具有诸如 String 之类的类型, Number等参见:https://docs.oracle.com/javaee/7/api/javax/json/JsonValue.html

但是,由于 jsonObject 还实现了 Map<String, JsonValue> ,我可以得到号码map.get("high")例如,但我认为这不是正确的方法,如果“高”指向另一个 JsonValue那不是Number (例如,这是一个json block {}),那么我需要处理这个JsonValue作为Map<String, JsonValue> ,但类型转换并不是最好的做法。

更新:

这个库似乎有一个错误。请记住,json 键是带有“”的字符串,因此如果我尝试:

    System.out.println(jsonObject.getJsonObject("high"));
System.out.println("hello?");

它不会打印任何内容,甚至不会打印 "hello?"这是上面的!!!但是,如果我这样做:

    System.out.println(jsonObject.getJsonObject("\"high\""));
System.out.println("hello?");

"hello?"被打印出来,但是上面的打印是 "null"即使我确定 key "high" (带有“”)存在,因为我打印了 jsonObject之前。

最佳答案

Json有4种主要类型:Object、Array、number和string,这些类型对应于java类型中的:Map、List、BigDecimal和String。因此,对于每种类型的对象,您必须调用正确的函数:getJsonObjectgetJsonArraygetJsonNumbergetJsonString 。您无法在 JsonNumber 上 getJsonObject,因此会导致错误。

对于你的情况,你不能反序列化你的json,所以我向你建议我的解决方案是将其解析为一个Map,然后循环抛出这个map来获取你想要的值。这是一个example code为此。

关于java - 使用 JSONP 浏览 json,数字可以作为 JsonObject 返回吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45177891/

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