1

我正在努力将一些现有的代码与通过 JSON 有效负载接受输入的服务器集成。我收到了一个 JSON 对象,我需要构造一个表示键值对的 Map,其中的值采用合理的预期类型。org.json 解析器似乎适用于所有情况,除了 JSONArrays 周围的情况。

我可以看到从 JSONArray 构建 String[] 非常容易……只要您知道 String[] 就是您所需要的。但是,我也收到了双精度数组、整数数组,没有什么可以区分它们的。我需要弄清楚类型,并创建一个适当类型的数组。

我尝试从数组中提取第一个元素并获取其类型,希望创建该类型的数组实例,如下所示:

private Object[] decodeToArray(JSONArray list) throws JSONException { 

    if (list.length() > 0) {
        Class<? extends Object> type = list.get(0).getClass();
        type[] result = Array.newInstance(type, list.length());
    }

但是当然,这不会编译——type它是一个实例,而不是一个类;它不接受?作为一种类型;如果我尝试给它起一个名字 la <T extends Object>,它需要T在方法签名中声明,它似乎没有以任何方式连接到从列表元素获得的未知类型。

int[]当然,这对于anddouble[]情况根本没有任何作用。Integer[] 和 Double[] 可能是可以接受的折衷方案。

作为一个临时解决方案,我已经能够将 JSONArray 呈现为 Object[],然后更改与这些数组交互的服务器端代码以根据需要强制转换它们,但这很丑陋,并且它允许一些 JSON-yuck渗入我们的代码库。

是否有任何库或巧妙的技巧可以在 Java 中创建未知类型的数组?是否有我可以要求使用的 JSON 约定来告知我预期的类型?

4

1 回答 1

0

假设这是针对现实世界而不是家庭作业,只需使用Gson,一个完全符合您要求的库。

另外,请彻底阅读此线程:https ://stackoverflow.com/questions/338586/a-better-java-json-library?rq=1

于 2013-05-02T18:26:43.100 回答