org.glassfish.json.JsonStringImpl无法强制转换为javax.json.JsonArray

时间:2015-04-10 13:06:20

标签: 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 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。我该如何解决这个问题?

5 个答案:

答案 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来解决类似的问题。 因此,我建议您尝试使用不同的数据类型,直到找到有效的数据类型。