Разбор массива 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\"]}"

Обратите внимание, что в квадратных скобках нет кавычек.