我正在努力将一些现有的代码片段与通过JSON有效负载接受输入的服务器集成。我得到一个JSON对象,需要构造一个表示键值对的Map,其中的值采用合理的预期类型。org。json解析器似乎适合所有情况,除了JSONArrays。
我可以看到,这是很容易建立一个字符串[]从JSONArray…只要你知道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 extends Object>
,它要求在方法签名中声明T
,这似乎与从列表元素获得的未知类型没有任何联系。
当然,这对int[]
和double[]
的情况没有任何作用。整数[]和双精度[]可能是可以接受的妥协。
作为一种临时解决方案,我已经能够将JSONArray呈现为Object[],然后根据需要更改与这些数组交互的服务器端代码来转换它们,但这很难看,并且它允许一些JSON-yuck渗入我们的代码库。
在Java中是否有创建未知类型数组的库或聪明的技巧?我是否可以要求使用JSON约定来告诉我期望使用什么类型?
假设这是针对现实世界而不是家庭作业,只需使用Gson
,这是一个您正在寻找的库。
同时,仔细阅读这个帖子:https://stackoverflow.com/questions/338586/a-better-java-json-library?rq=1