0

将 JSON 数据从 javascript 函数传递到 bean 时出现以下错误。 ***java.lang.String cannot be cast to org.json.simple.JSONArray***. 我正在使用json-simple来解析后端中的数据我正在使用富人脸提供的 a4j Js 函数将 JSON 数据作为 actionParam 传递。我正在使用 simple-json 来解析和解码正在传递的 json 数据。

Configurations
richfaces 3.3.3
jsf v1.2
apache tomcat v7.0.x
simple-json

这是我发送到 bean 的 javascript 变量

var a = [
                    {
                       'name': 'John',
                       'height' : '170',
                       'age' : 26
                    },{
                           'name': 'Doe',
                           'height' : '180',
                           'age' : 30
                    }
           ];


           removeServiceGroup(JSON.stringify(a));

这是我用来调用后端 bean 的 a4j:jsfunction

<a4j:jsFunction name="removeServiceGroup" action="#{someBean.removeServiceGroup}">          
        <a4j:actionparam name="jsonData" />
    </a4j:jsFunction>

在bean中,这就是我接收数据并解析它的方式

String a = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("jsonData");
        System.out.println(a);
        JSONParser parser = new JSONParser();
        Object obj = parser.parse(a);
        JSONArray arr = (JSONArray)obj;

system.out.println 在控制台上显示

"[{\"name\": \"John\", \"height\": \"170\", \"age\": 26}, {\"name\": \"Doe\", \"height\": \"180\", \"age\": 30}]"

我究竟做错了什么。我浏览了几个论坛并尝试用几种不同的方法执行此操作,但最终都会出现相同的错误消息

java.lang.String cannot be cast to org.json.simple.JSONArray
4

1 回答 1

0

根据您的评论,使用a4j:actionparam.
一种解决方法是在将请求参数传递给之前手动解析请求参数的值以删除额外的东西JSONParser

input = input.replace("\\\"", "\"");//Remove extra \
if(input.startsWith("\"")){ //Remove " at starting of the value
input = input.substring(1);
}
if(input.endsWith("\"")){//Remove ending " 
    input = input.substring(0,input.length()-1);
}

另请查看此论坛帖子和此wiki 页面

于 2013-06-13T21:13:53.440 回答