Gson и запятая в последнем элементе массива - PullRequest
0 голосов
/ 28 октября 2018

У меня есть этот JSON

{
  id: 142,
  fields: [
    { fieldId: 50, value: 0 },
    { fieldId: 51, value: 0 },
    { fieldId: 52, value: 0 }, // <--- Notice the comma
  ]
}

Как видите, после последнего элемента запятая.

Когда я анализирую GSON с этими объектами:

class Foo {
    public int id;
    public List<Field> fields;
}

class Field {
    public int fieldId;
    public int value;
}

с использованием этого кода:

    Gson gson = new Gson();
    Foo foo = gson.fromJson(json, Foo.class);

Я получаю foo объект , содержащий 4 элемента в массиве fields.

Это проблема с GSON или мой JSON не является правильно отформатированным JSON?Я думал, что эта последняя запятая в JavaScript была разрешена ...

1 Ответ

0 голосов
/ 29 октября 2018

С RFC 8259 ( Обратите внимание, что я не уверен, является ли это последним RFC для JSON ):

5. Массивы

Структура массива представляется в виде квадратных скобок, окружающих ноль или более значений (или элементов). Элементы разделены запятые.

массив = начальный массив [значение * (значение-разделитель значений)] конечный массив

Нет требования, чтобы значения в массиве были одинаковыми тип.

Теперь GSON, похоже, делает что-то вроде интерпретации последнего предложения, так что null является значением. Итак, после вашей последней запятой есть нулевое значение.

Вы также можете проверить, что произойдет, если десериализовать следующее:

{
  id: 142,
  fields: [
    { fieldId: 50, value: 0 },,,,,,
    { fieldId: 51, value: 0 },
  ]
}

Как вы можете догадаться, объектов null будет столько же, сколько дополнительных запятых.

Я бы не сказал, что это поведение является проблемой, и я не могу сказать, что это против RFC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...