无法将org.glassfish.json.JsonStringImpl强制转换为javax.json.JsonArray
我有一段代码:无法将org.glassfish.json.JsonStringImpl强制转换为javax.json.JsonArray,java,json,glassfish,Java,Json,Glassfish,我有一段代码: 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
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);
}
JsonObject fg=null;
试一试{
fg=message.getJson();//从客户端获取JSON对象
System.out.println(“JSONGOBJECT在这里:”+fg);
JsonArray arr1=fg.getJsonArray(“to”);//我在这里得到了异常
int size=arr1.length();
arrays=新的ArrayList();
用于(对象o:arr1)
{
字符串user=(o==null?null:o.toString());
如果(用户!=null){
添加(用户);
}
}
捕获(例外e)
{
System.out.println(“此处的Exeption:+e”);
}
当我试图从JsonArray
访问“to”参数的值时,出现了此异常。我没有在任何地方使用org.glassfish.json
库。我也没有导入它
我在当前代码中只导入了
javax.json
。如何解决此问题?不确定从客户端获取的消息对象的数据结构,以确定“to”对象是数组还是字符串。您可以在此处提供更多信息。异常可能是由于“to”的键被映射到JsonString(例如{to:“thisthat”},而不是数组(例如{to:[“this”,that”]})。如果是这种情况,则尝试将JsonString强制转换到JsonArray失败,因此出现异常。这里可能没有显示,但需要检查消息的结构,尤其是“to”字段
关于org.glassfish.json,很可能是由于您的运行时环境使用了glassfish json实现(默认情况下)。这可能包括在jar文件中(类加载)。json包(javax.json)您在代码中导入的只是一个接口。它将允许您编译代码。要运行代码,您将需要一个java包实现(jar)(任何相关的)来实现javax.json接口)。您可以显式配置运行时环境以使用特定的json实现包,或者您的环境可能具有javax.json的默认配置
希望这能有所帮助。正如young chisango提到的,您可能没有包含json api 实施 如果希望使用JSON处理API运行应用程序,请在maven项目中声明对JSON API实现的依赖关系
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.0.4</version>
</dependency>
玻璃鱼
javax.json
1.0.4
问题不是因为缺少导入,因为这不会导致触发glassfish。如上所述,glassfish实现是从javax.json调用的,这不是问题
这个问题是由于JsonObject中没有要转换为JsonArray的数组造成的
一个可能的例子是,在javascript中,数组可能被声明为ArrayBuffer,而不是数组
进入javascript以确保有一个数组,然后打印出JsonObject以查看其中的内容以解决问题。发生错误的原因是您试图将
number
转换为string
这肯定会奏效
for (int i = 0; i < jsonArray.size(); i++)
jsonArray.getJsonObject(i).get(key).toString();
for(int i=0;i
以通用方式获取对象。我通过将代码更改为使用
getBoolean
而不是getJsonArray
解决了类似的问题。
因此,我建议您尝试不同的数据类型,直到找到一种有效的数据类型。Hi@simar您能进一步解释这个问题吗..还要检查org.json.JsonObject是否是您要导入的..@viraj:我甚至没有导入它。我已经严格遵守javax.json的所有规定,并进行了多次交叉检查。好的..那么有一种可能性我可以我猜,“to”是json对象的一个键,我们正试图将其作为JSONARRAY来获取。您能更新一下您在JSONGOBJECT上获得的信息吗:以便我们能够验证这种可能性。