Java语法:JSONArray array =(JSONArray)obj

时间:2015-01-03 04:15:59

标签: java arrays json syntax json-simple

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

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

在我对程序员说话的最佳尝试中,我理解“JSONArray”是一个类。我们正在实例化一个新的JSONArray并将其称为“数组”。我们正在使用等号右侧的值初始化“数组”。

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

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

作为最外层的结构,收到的JSON可以是"对象" (地图)或"数组" (列表)。 JSONValue.parse(jsonResult)生成JSONObject或JSONArray,具体取决于jsonResult字符串中最外层的结构类型。因此必须声明parse方法以返回一些常见的"祖先"这两个班级。 JSON-Simple是一个相当粗略的JSON工具包,除了Object之外没有其他两个类的公共超类。

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

正如艾略特所建议的那样,至少包括instanceof测试会更好,正式,或者,如果使用JSON-Simple以外的套件,可能会使用接口。允许查询其类型的两个类的公共超类。