我正在努力将一些现有的代码与通过 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 约定来告知我预期的类型?