Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JSONP在json中导航时,可以将数字作为JsonObject返回吗?_Java_Json_Inheritance_Jsonp - Fatal编程技术网

Java 使用JSONP在json中导航时,可以将数字作为JsonObject返回吗?

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

我正在编写一个函数,该函数在给定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执行此操作并调用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的语法有错误,我已经为您编辑了完整解决方案的答案。