Java JSON/对象到数组

Java JSON/对象到数组,java,json,casting,Java,Json,Casting,我有一个关于类型转换的问题。我有以下JSON字符串: {"server":"clients","method":"whoIs","arguments":["hello"]} 我正在将其解析为以下映射 现在可以执行以下操作: request.get("arguments"); System.out.println(request.get("arguments")[0]); 这个很好用。但是我需要得到存储在参数中的数组。我怎样才能做到这一点?例如,我尝试了以下方法: request.get("

我有一个关于类型转换的问题。我有以下JSON字符串:

{"server":"clients","method":"whoIs","arguments":["hello"]}
我正在将其解析为以下映射

现在可以执行以下操作:

request.get("arguments");
System.out.println(request.get("arguments")[0]);
这个很好用。但是我需要得到存储在参数中的数组。我怎样才能做到这一点?例如,我尝试了以下方法:

request.get("arguments");
System.out.println(request.get("arguments")[0]);
但这当然没用

这怎么可能呢?

可能吧

 System.out.println( ((Object[]) request.get("arguments")) [0]);
??您还可以尝试将其强制转换为
字符串[]


无论如何,还有更文明的解析JSON的方法,例如。

最有可能的是,值是
java.util.List
。因此,您可以像这样访问它:

System.out.println(((List<?>) request.get("arguments")).get(0));
Jackson当然也可以绑定到常规地图,其操作如下:

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

但是,由于强制转换和无法优雅地处理空值,访问映射就不那么方便了。

StaxMan认为Java中JSON数组的类型是
List
(以
ArrayList
作为实现),假设JSON与

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

此外,还描述了“[b]y默认情况下,数组将被解析为
java.util.List
instances”。

如何将JSON字符串传递给映射?这是不可能的。您正在使用的请求对象是什么?您使用特定的web框架吗?我只使用套接字来接收。。然后是用于解析的svenson库。并像这样存储:映射“这不起作用”是没有用的:请解释它是如何失败的(异常,堆栈跟踪)。另外:您使用的是哪个JSON库?这个问题解决了吗?是的,我尝试了几乎所有的JSON解析器。GoogleGSON的问题在于它需要类。我认为这是一种不好的做法,因为对于几乎每种类型的请求,我都需要创建一个类。如果没有类,那么仍然需要编写代码来处理JSON内部的层次结构。。。而课程的发明正是为了同样的目的。您还可以通过编写自己的(反)序列化程序来充分利用这两个方面。无论如何,我很难在不了解你的项目细节的情况下发表评论。啊,是的,我当然理解。我正在构建一个具有企业服务总线体系结构的内容管理系统。这意味着系统将有许多小型服务器,每个服务器都有自己的功能。(例如,用于图像的图片服务器和用于正确策略的权限服务器等)。服务器之间的请求基于以下原则:{server:images,method:getPicture(1)}。我已经用ruby构建了这个系统,但为了提高性能,我正在用java重新构建它。由于java没有eval()方法,我将json请求更改为:{server:images,method:getPicture,arguments:[1]}嗯,eval()只在您想要执行Javascript时才需要,而不是解析json时才需要。因此,您的更改使内容更接近JSON只需在其中添加双引号,您就完成了。还有一种情况是,SO编辑器不允许我进行关键的单字母更正(不知何故,我无法通过CATSPAW或其他名称):树模型的URL缺少“l”。这是正确的答案:。
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)