Java 使用JSONP在json中导航时,可以将数字作为JsonObject返回吗?
我正在编写一个函数,该函数在给定json坐标的情况下导航。例如:Java 使用JSONP在json中导航时,可以将数字作为JsonObject返回吗?,java,json,inheritance,jsonp,Java,Json,Inheritance,Jsonp,我正在编写一个函数,该函数在给定json坐标的情况下导航。例如: { "a": { "b" : "c" }, "d": { ... } } 如果我打电话 NavigateThroughJson("a.b", myJsonObject) 我应该得到c作为输出。我这样做是因为我不能使用反序列化,json具有任意格式。以下是我的功能: public JsonValue NavigateThroughJson(String coordinates, JsonObject jso
{
"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执行此操作并调用NavigateThroughJsonhigh、jsonAbove时:
{"high":7999.0,"vol":1261.83821469,"buy":7826.01,"last":7884.0,...}
没有返回任何内容,就像o.getJsonObject。。。不返回任何内容,甚至不返回null
我认为这是因为high指向一个数字,而不是high:{…}这样的json对象,即使一致性库应该返回7999.0作为类型为Number的JsonObject。如您所见,JsonObject实现了JsonValue,它可以有字符串、数字等类型。请参阅:
然而,由于jsonObject也实现了Map,例如,当我执行Map.gethigh时,我可以得到数字,但我认为这不是正确的方法,如果high指向另一个不是数字的JsonValue,例如它是一个json块{},那么我需要将这个JsonValue视为一个Map,但强制转换不是最好的方法
更新:
这个库似乎有一个bug。请记住,json键是带有的字符串,因此如果我尝试:
System.out.println(jsonObject.getJsonObject("high"));
System.out.println("hello?");
它不会打印任何东西,甚至连你好都不会?哪个在上面!!!但是,如果我这样做:
System.out.println(jsonObject.getJsonObject("\"high\""));
System.out.println("hello?");
喂?已打印,但上面的打印为空,尽管我确信high with键存在,因为我以前打印过jsonObject。Json有4种主要类型:Object、Array、number和string,这些类型对应于:Map、List、BigDecimal和java类型中的string。因此,对于每种类型的对象,必须调用正确的函数:getJsonObject、getJsonArray、getJsonNumber或getJsonString。无法在JsonNumber上获取JSONObject,因此会导致错误
对于您的情况,您不能反序列化json,所以我建议您我的解决方案是将其解析为映射,然后循环抛出此映射以获得您想要的值。这是一个很好的例子。还有,有人知道如何在没有键的情况下读取json吗?很有意义,我认为数字、字符串等也可以被视为JsonObject,而且,没有方法instanceOfAlso,你可以比较JsonObject是否是一个数字、一个列表等,但在这个阶段它实际上是一个JsonObject。我应该看看key high的值是否是一个数字、一个列表等,但为此我需要先获取它,但如何获取?@LucasZanella为了快速响应,我对instanceOf的语法有错误,我已经为您编辑了完整解决方案的答案。