2013-05-02 59 views
1

我很努力地将一些现有的代码段与通过JSON负载接受输入的服务器集成在一起。我交给了一个JSON对象,并且我需要构造一个表示键值对的Map,其中值采用合理的预期类型。 org.json解析器似乎适用于除JSONArray之外的所有情况。将JSONArray转换为适当类型的Java数组

我可以看到,从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是一个实例,不是一个类;它不会接受?作为一种类型;如果我尝试给它一个名字,那么它需要在方法签名中声明T,它似乎没有以任何方式连接到从列表元素获得的未知类型。

而这对于int[]double[]的情况当然根本不做任何事情。整数[]和双[]可能是可以接受的折中。

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

是否有任何库或巧妙的技巧用于在Java中创建未知类型的数组?有一个JSON约定,我可以要求使用它会告诉我什么类型是预期的?

+0

这是家庭作业或生产? – durron597 2013-05-02 18:25:11

+0

生产。属于科学类。 – AbGator 2013-05-02 18:28:09

+0

是的,我想,我不知道你是否有一个编写Json解释器的项目,或者你是否需要这个功能。查看我的回答 – durron597 2013-05-02 18:28:57

回答

0

假定这是现实世界,而不是功课,只是使用Gson, a library that does exactly what you're looking for.

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

+0

我已经看过Gson api,并没有看到很多我没有通过org.json获得的功能 - 你能指点我一个类还是一个例子? – AbGator 2013-05-02 18:29:03

+0

@AbGator查看我刚刚链接的stackoverflow问题 – durron597 2013-05-02 18:30:02

相关问题