Java 语法:JSONArray array = (JSONArray)obj

Java Syntax: JSONArray array = (JSONArray)obj

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

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

在我对程序员演讲的最佳尝试中,我了解到 "JSONArray" 是 class。我们正在实例化一个新的 JSON 数组并将其命名为 "array"。我们正在用等号右边的值初始化"array"。

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

谢谢!

这是一个(未经检查的)类型转换的例子。我建议您首先使用类型比较运算符 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

Received JSON 作为其最外层结构,可以是 "object"(映射)或 "array"(列表)。 JSONValue.parse(jsonResult) 生成 JSONObject 或 JSONArray,具体取决于哪种结构在 jsonResult 字符串的最外层。因此必须将 parse 方法声明为 return 这两个 类 中的某些公共 "ancestor"。 JSON-Simple 是一个相当粗糙的 JSON 工具包,除了 Object.

之外,这两个 类 没有共同的超类

想必这种情况下的程序员知道接收到的数据总会有一个JSON"array"作为最外层的结构。他最初将 parse 的结果放在对象引用中(因为对象是 return 从 parse 编辑的形式类型),然后将该值转换为 JSON 数组。

正如 Eliot 所建议的那样,至少在形式上包括一个 instanceof 测试会更好,或者,如果使用 JSON-Simple 以外的工具包,那么可能为允许查询其类型的两个 类 使用公共超类上的接口。