Можете ли вы использовать запятую в JSON-объекте? - PullRequest
353 голосов
/ 14 октября 2008

При ручной генерации объекта или массива JSON часто проще оставить запятую в последнем элементе объекта или массива. Например, код для вывода из массива строк может выглядеть (в псевдокоде на C ++):

s.append("[");
for (i = 0; i < 5; ++i) {
    s.appendF("\"%d\",", i);
}
s.append("]");

дает вам строку, как

[0,1,2,3,4,5,]

Это разрешено?

Ответы [ 16 ]

1 голос
/ 14 октября 2011

Из моего прошлого опыта я обнаружил, что разные браузеры по-разному обрабатывают конечные запятые в JSON.

И Firefox, и Chrome справляются с этим просто отлично. Но IE (все версии), кажется, сломался. Я имею в виду действительно сломать и перестать читать остальную часть сценария.

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

:)

1 голос
/ 12 ноября 2010

Я веду текущий счет и сравниваю его с общим счетом. Если текущий счет меньше общего, я отображаю запятую.

Может не работать, если у вас нет общего количества до выполнения генерации JSON.

Опять же, если вы используете PHP 5.2.0 или выше, вы можете просто отформатировать свой ответ, используя встроенный JSON API.

0 голосов
/ 01 марта 2019

Поскольку цикл for используется для итерации по массиву или подобной итерируемой структуре данных, мы можем использовать длину массива, как показано,

awk -v header="FirstName,LastName,DOB" '
  BEGIN {
    FS = ",";
    print("[");
    columns = split(header, column_names, ",");
  }
  { print("  {");
    for (i = 1; i < columns; i++) {
      printf("    \"%s\":\"%s\",\n", column_names[i], $(i));
    }
    printf("    \"%s\":\"%s\"\n", column_names[i], $(i));
    print("  }");
  }
  END { print("]"); } ' datafile.txt

С datafile.txt, содержащим,

 Angela,Baker,2010-05-23
 Betty,Crockett,1990-12-07
 David,Done,2003-10-31
0 голосов
/ 18 ноября 2018

Существует возможный способ избежать ветвления if в цикле.

s.append("[ "); // there is a space after the left bracket
for (i = 0; i < 5; ++i) {
  s.appendF("\"%d\",", i); // always add comma
}
s.back() = ']'; // modify last comma (or the space) to right bracket
0 голосов
/ 02 ноября 2017

Это не рекомендуется, но вы все равно можете сделать что-то подобное, чтобы разобрать его.

jsonStr = '[0,1,2,3,4,5,]';
let data;
eval('data = ' + jsonStr);
console.log(data)
0 голосов
/ 11 декабря 2008

Я обычно перебираю массив и добавляю запятую после каждой записи в строке. После цикла я снова удаляю последнюю запятую.

Возможно, не самый лучший способ, но менее затратный, чем проверка каждый раз, если это последний объект в цикле, я думаю.

...