我正在学习使用Java解码JSON文件,并且遇到了一些我不理解的语法。我也是Java新手。以下是代码段:
Object obj = JSONValue.parse(jsonResult);
JSONArray array = (JSONArray)obj;
在我对程序员说话的最佳尝试中,我理解“JSONArray”是一个类。我们正在实例化一个新的JSONArray并将其称为“数组”。我们正在使用等号右侧的值初始化“数组”。
我的问题是 - 我不明白等号右侧发生了什么。为什么括号中有“JSONArray”:( JSONArray)obj?我不明白这里发生了什么。
谢谢!
答案 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以外的套件,可能会使用接口。允许查询其类型的两个类的公共超类。