【问题标题】:Cast to class from JSONObject从 JSONObject 转换为类
【发布时间】:2013-08-06 10:36:13
【问题描述】:

我从服务响应中得到 JSONObject。

如果发生错误,我需要将其转换为错误类之一。

Json 类似于

{"message":"This means that the userID is not valid.","name":"UserNotFoundException"}

其中名称可以是模型包中的任何异常

我可以这样做吗?

Class ex = Class.forName("com.myapp.model.Exceptions." + jsonObject.getString("name"));

如何将 ex 转换为 UserNotFoundException 类,以便我可以使用它的方法,即 ex.doSomething()

【问题讨论】:

  • 你不施放,你会捕捉到异常。
  • 我在“catch (JSONException e)”中这样做

标签: java android


【解决方案1】:

如果你真的需要这样做(虽然这通常很少做),看看反射:Java how to instantiate a class from string

【讨论】:

    【解决方案2】:

    您可以使用 GSON。它可以轻松序列化和反序列化 json 数据..

    供参考 --> https://code.google.com/p/google-gson/

    【讨论】:

      【解决方案3】:

      您实际上并没有在代码中强制转换任何内容,而是使用您自己的命名约定来检索类实例。稍后您需要使用 JSON 对象中的 message 创建该异常类的实例。

      选角是完全不同的事情,你可以看看this answer来了解一下。

      问题是,您不能将 JSON 对象转换为 Java 类,就像您不能将 DOM 树转换为 Java 对象树一样。您可以做的(每个人都做的)是将 JSON 对象 编组/解组 到 Java 类。这意味着,创建与 JSON 对象结构匹配的 Java 类的实例,然后将该 Java 类的属性映射到 JSON 对象的属性。

      所以,在您的代码中,它看起来像:

      Class ex = Class.forName("com.myapp.model.Exceptions." + jsonObject.getString("name"));
      Constructor cons = ex.getConstructor(String.class);
      UserNotFouncException unfe = (UserNotFoundException) cons.newInstance(jsonObject.getString("message"));  // here is where actual casting is happening
      

      注意:请注意,上面的代码可能会抛出您需要注意的异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-05
        • 1970-01-01
        • 1970-01-01
        • 2017-01-31
        • 2023-03-08
        相关资源
        最近更新 更多