ошибка при разборе данных JSON в bean-компоненте с использованием simple-json

Я получаю следующую ошибку при передаче данных JSON из функции javascript в bean-компонент. ***java.lang.String cannot be cast to org.json.simple.JSONArray***. Я использую json-simple для анализа данных в бэкэнде. Я использую функцию Js a4j, предоставляемую богатыми лицами, для передачи данных JSON в качестве actionParam. Я использую simple-json для анализа и декодирования передаваемых данных json.

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

Вот моя переменная javascript, которую я отправляю в компонент

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


           removeServiceGroup(JSON.stringify(a));

Это функция a4j:js, которую я использую для вызова внутреннего компонента.

<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

person user2317577    schedule 13.06.2013    source источник
comment
Это очень странно, я только что проверил тот же код, что и ваш, и он работает очень хорошо. Вы уверены, что именно это значение вызывает ошибку? Я только что выполнил этот код, и он дал мне: Array: [{"height":"170","age":26,"name":"John"},{"height":"180","age":30,"name":"Doe"}] в качестве вывода, arr.toString()   -  person Laabidi Raissi    schedule 13.06.2013
comment
Вы создали строку в Java и попробовали код на ней, или данные были переданы из функции javascript на стороне клиента. Потому что, когда я попробовал первый подход (создать строку в java), он работает. Разница здесь выглядит так, что данные, переданные из javascript, имеют «\», которые Java, похоже, не анализирует. Это воспринимается буквально. Также я замечаю, что строка, отправленная из javascript, начинается с двойных кавычек при отображении на консоли, в отличие от строки, созданной в Java.   -  person user2317577    schedule 14.06.2013
comment
упс, да, я просто использовал этот String как есть. Пожалуйста, посмотрите мой ответ   -  person Laabidi Raissi    schedule 14.06.2013
comment
теперь это то, что я не понимаю. Почему я должен форматировать ввод таким образом? Разве это не должно быть обработано само по себе вместо того, чтобы я вручную удалял эти лишние символы? Я не в курсе, если проблема здесь связана с «Stringify» или с «Simple JSON», который я использую.   -  person user2317577    schedule 19.06.2013


Ответы (1)


Судя по вашему комментарию, возникла проблема с передачей данных JSON с использованием 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);
}

Также проверьте этот форум сообщение и этот вики-страница.

person Laabidi Raissi    schedule 13.06.2013