0

我已经阅读了几十篇文章(这里和其他地方),要求从/到 JSON 进行解析,并且大多数人为每个类编写了他们独有的解析器。通常的答案是使用 GSON 或其他库,但由于 android 本身支持 JSON,我看不到使用第三方库的意义。

因此,我专门使用 Android JDK 库制作了自己的通用 JSONParser。它适用于具有以下字段的任何类:原始类型、字符串、一维数组或其他类。现在的问题是处理更多维度的数组。我是一个使用反射和 JSON 的菜鸟,所以也许我误解了一些东西。

您必须指定要转换 JSON 字符串的类。然后它基本上遍历类中的所有字段,并在 JSON 中搜索具有相同名称的字段。这仅适用于公共方法(现在对我来说这不是一个难题,但如果有人有改进它的想法,我也会很感激)。

当我有一个数组数组时,我的问题就出现了,我尝试了几种方法,但我无法找到处理 n 维数组的解决方案。这是我的数组方法,“TO-DO”部分是我不知道的部分。我试过使用注释行,但失败了。可能在两个方向上都是同一个问题,但我现在担心解码 JSON。

    Everything solved!! Go to comments

我认为它可能对更多人有用,所以我在这里上传了整个代码。 http://pastebin.com/X7CmaxNf

从public static Object populateObjectFromJSON(Class classname, JSONObject js) {}第 65 行调用方法 insertArrayFromJSON() 。

4

1 回答 1

0

我终于自己解决了这个问题。从昨天开始我就被困住了,因为我错误地面临数组问题,但后来我改变了方法,以正确的方式递归地攻击它。在 pastebin 中是整个代码(我不在这里发布,因为它有 200 行)。随意使用它,如果有人有改进它的想法,请告诉我!

http://pastebin.com/Jtf2SLDu

要点是正确使用 Array.set()、Array.newInstance() 和 Array.get() 方法。如果有人想看,这是在第 110-125 行。

为了访问受保护的和私有的方法,我在这个网站上找到了解决方案。所以现在它适用于任何具有任何公共/受保护/私有字段的类。http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html

我已经以一种方式,您可以在解析之前设置所需的隐私。

于 2012-09-10T09:55:53.803 回答