从JSONObject转换为类

时间:2013-08-06 10:36:14

标签: java android

我从服务响应中获得了JSONObject。

如果出现错误,我需要将其转换为其中一个错误类。

Json就像

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

其中name可以是模型包中的任何例外

我可以这样做吗?

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您实际上并未在代码中进行任何操作,而是使用自己的命名约定检索类实例。稍后您需要使用JSON对象中的message创建该异常类的实例。

投射是完全不同的事情,为了获得一些理解,你可以看一下this answer

问题是,您无法将JSON对象强制转换为Java类,就像您无法将DOM树强制转换为Java对象树一样。您可以做的(并且每个人都这样做)是将JSON对象添加到Java类。这意味着,创建与JSON对象结构匹配的Java类实例,然后使用JSON对象的属性映射该Java类的属性。

因此,在您的代码中,它看起来像:

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

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

答案 2 :(得分:0)

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

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