Java JSON /对象到数组

时间:2010-04-12 14:22:44

标签: java json casting

我对类型转换有疑问。我有以下JSON字符串:

{"server":"clients","method":"whoIs","arguments":["hello"]}

我正在将其解析为以下Map< String,Object>。

{arguments=[hello], method=whoIs, server=clients}

现在可以执行以下操作:

request.get("arguments");

这很好用。但我需要获取存储在参数中的数组。我怎么能做到这一点?我试过(例如)以下内容:

System.out.println(request.get("arguments")[0]);

但当然这不起作用..

这怎么可能?

3 个答案:

答案 0 :(得分:3)

最有可能的是,价值是java.util.List。所以你可以访问它:

System.out.println(((List<?>) request.get("arguments")).get(0));

但是为了更方便的访问,或许可以查看Jackson,特别是Tree Model

JsonNode root = new ObjectMapper().readTree(source);
System.out.println(root.get("arguments").get(0));

杰克逊当然也可以绑定到常规地图,这可以像:

Map<?,?> map = new ObjectMapper().readValue(source, Map.class);

但是由于强制转换而无法正常处理空值,因此访问Maps会不那么方便。

答案 1 :(得分:0)

也许

 System.out.println( ((Object[]) request.get("arguments")) [0]);

?您也可以尝试将其转换为String[]

无论如何,有更多文明的解析JSON的方法,例如http://code.google.com/p/google-gson/

答案 2 :(得分:0)

StaxMan是正确的,Java中JSON数组的类型是List(以ArrayList为实现),假设JSON被反序列化,类似于

Map<String, Object> map = JSONParser.defaultJSONParser().parse(Map.class, jsonInput);

通过简单地检查类型来确定这些事情很容易。

Map<String, Object> map = JSONParser.defaultJSONParser().parse(Map.class, jsonInput);
System.out.println(map);

for (String key : map.keySet())
{
  Object value = map.get(key);
  System.out.printf("%s=%s (type:%s)\n", key, value, value.getClass());
}

输出:

{arguments=[hello], method=whoIs, server=clients}
arguments=[hello] (type:class java.util.ArrayList)
method=whoIs (type:class java.lang.String)
server=clients (type:class java.lang.String)

此外,the svenson documentation on basic JSON parsing描述&#34; [b] y默认情况下,数组将被解析为java.util.List个实例&#34;。