【问题标题】:Java Syntax: JSONArray array = (JSONArray)objJava 语法:JSONArray 数组 = (JSONArray)obj
【发布时间】:2023-03-22 04:43:01
【问题描述】:

我正在学习用 Java 解码 JSON 文件,但遇到了一些我不理解的语法。我也是 Java 新手。这是代码sn-p:

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

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

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

谢谢!

【问题讨论】:

  • Java 对象没有名称。 array 是参考,obj 是参考。

标签: java arrays json syntax json-simple


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-03-28
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 2016-01-14
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      相关资源
      最近更新 更多