0

我正在学习用 Java 解码 JSON 文件,并且遇到了一些我不理解的语法。我也是 Java 新手。这是代码片段:

Object obj = JSONValue.parse(jsonResult);
JSONArray array = (JSONArray)obj;

在我最好的程序员演讲中,我知道“JSONArray”是一个类。我们正在实例化一个新的 JSONArray 并将其称为“数组”。我们正在使用等号右侧的值初始化“数组”。

我的问题是——我不明白等号右边发生了什么。为什么括号中是“JSONArray”:(JSONArray)obj?我不明白这里发生了什么。

谢谢!

4

2 回答 2

0

接收到的 JSON 作为其最外层结构,可能是“对象”(Map)或“数组”(List)。 JSONValue.parse(jsonResult)生成 JSONObject 或 JSONArray,具体取决于jsonResult字符串中最外层的结构。因此,parse必须声明该方法以返回这两个类的一些共同“祖先”。JSON-Simple 是一个相当粗糙的 JSON 工具包,除了 Object 之外,这两个类没有共同的超类。

想必这种情况下的程序员知道接收到的数据总会有一个JSON“数组”作为最外层的结构。他最初将结果 fromparse放在 Object 引用中(因为 Object 是从 返回的正式类型parse),然后将该值转换为 JSONArray。

正如艾略特所建议的那样,至少在形式上包含一个instanceof测试会更好,或者,如果有人使用 JSON-Simple 以外的工具包,则可以为两个允许的类使用公共超类上的接口查询他们的类型。

于 2015-01-03T04:44:44.823 回答
0

这是(未经检查的)类型转换的示例。我建议您首先使用类型比较运算符使用检查强制转换instanceof。就像是,

JSONArray array = null;
Object obj = JSONValue.parse(jsonResult);
if (obj instanceof JSONArray) {
    array = (JSONArray)obj;
}

如果你确定它永远是JSONArray你可能会在一行中做到这一点

JSONArray array = (JSONArray) JSONValue.parse(jsonResult);

之所以需要强制转换,是因为结果parse()Object.

于 2015-01-03T04:19:59.087 回答