Разбор массива json дает ошибку
У меня есть следующий объект Javascript:
var o = {
"username":"username",
"args": [
"1", "2", "3"
]
};
И отправьте его как:
xhr.send(JSON.stringify(o));
Мой класс java:
public class Command implements Serializable {
private String username;
private String[] args;
//getters, setters constructors etc.
}
И в моем сервлете:
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response){
Command c;
try {
c = gson.fromJson(request.getReader(), Command.class);
} catch(Exception e) {
.
.
.
Дает ошибку: ожидается BEGIN_ARRAY, но был STRING в строке 1 столбца X, где номер столбца X есть где "[появляется в строковом JSON.
Из того, что я понимаю, это должно быть очень простым и понятным. Что я делаю неправильно?
EDIT: Я думаю, что это может быть связано с поведением JSON.stringfy() с массивами javascript строк.
JSON.stringify(o) возвращает:
"{" username ":" username "," args ":" [\ "1 \", \ "2 \", \ "3 \" ] "}"
Ответы
Ответ 1
Обычные массивы JavaScript предназначены для хранения данных с числовыми индексами. Попробуйте использовать Object вместо массива.
Попробуйте использовать приведенный ниже код для построения объекта и проверить вывод:
var o = {}; // Object
o['username'] = 'username';
o['args'] = []; // Array
o['args'].push('1');
o['args'].push('2');
o['args'].push('3');
var json = JSON.stringify(o);
alert(json);
Ответ 2
Я думаю, что у вас слишком много цитат в вашем строковом результате. Когда я создаю объект следующим образом:
var o = {
username: "username",
args: ["1","2","3"]
};
результат вызова JSON.stringify(o)
- это
"{\"username\":\"username\",\"args\":[\"1\",\"2\",\"3\"]}"
Обратите внимание, что в квадратных скобках нет кавычек.