我有这段代码:
JsonObject fg = null;
try{
fg = message.getJson(); //gettng the JSON object from the client
System.out.println("JSONGOBJECT IS HERE: "+fg);
JsonArray arr1 = fg.getJsonArray("to"); //I get the exception here
int size = arr1.length();
arrays = new ArrayList<String>();
for(Object o : arr1)
{
String user=(o == null ? null : o.toString());
if (user != null) {
arrays.add(user);
}
}
catch(Exception e)
{
System.out.println("Exeption HERE: "+e);
}
当我尝试访问&#34; to&#34;来自JsonArray
的参数。我没有在任何地方使用org.glassfish.json
库。还没有导入它。
我在当前代码中仅导入了javax.json
。我该如何解决这个问题?
答案 0 :(得分:2)
发生错误是因为您尝试将number
转换为string
。
这肯定会奏效。
for (int i = 0; i < jsonArray.size(); i++)
jsonArray.getJsonObject(i).get(key).toString();
以通用方式获取对象。
答案 1 :(得分:0)
不确定您从客户端获取的消息对象的数据结构,以确定&#34;到&#34; object是一个数组或字符串。你可以在这里提供更多信息。例外情况可能是由于&#34; to&#34; key被映射到JsonString(例如{to:&#34; thisthat&#34;},而不是数组(例如{to:[&#34; this&#34;,&#34;]})。在这种情况下,尝试将JsonString转换为JsonArray失败,因此异常。可能不在这里,但您需要检查消息的结构,尤其是&#34;到&#34;字段。< / p>
关于org.glassfish.json,很可能是由于您的运行时环境使用了glassfish JSON实现(默认情况下)。这可以作为jar文件包含(类加载)。您在代码中导入的json包(javax.json)只是一个接口。它将允许您编译代码。要运行代码,您将需要一个实现javax.json接口的java包实现(jar)(任何事情)。您可以显式配置运行时环境以使用特定的json实现包,或者您的环境可能具有javax.json的默认配置
希望这会有所帮助。
答案 2 :(得分:0)
正如年轻的chisango所提到的,你可能没有包括json-api 实施
如果要使用JSON Processing API运行应用程序,请在maven项目中声明对json-api实现的依赖关系。
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.0.4</version>
</dependency>
答案 3 :(得分:0)
问题不在于您缺少导入,因为这不会导致glassfish被触发。如上所述,glassfish实现是从javax.json调用的,这不是问题。
问题是由于JsonObject中没有要转换为JsonArray的数组引起的。
一个可能的例子是,在你的javascript中,数组可能被声明为ArrayBuffer而不是Array。
进入你的javascript以确保你有一个数组,然后打印出你的JsonObject以查看它中的内容来解决你的问题。
答案 4 :(得分:0)
我通过将代码更改为使用getBoolean
而不是getJsonArray
来解决类似的问题。
因此,我建议您尝试使用不同的数据类型,直到找到有效的数据类型。