Можно ли цитировать числа в формате JSON?

Могут ли быть кавычки вокруг чисел JSON? Кажется, что в большинстве поисковых ссылок цифры не "требуют" кавычек. Но, если парсеры принимают оба "attr" : 6 а также "attr" : "6"?

Если MyParser есть метод getInt чтобы получить номер с указанным ключом, следует MyParser.getInt("attr") вернуть 6 в обоих случаях или выкинуть исключение в последнем случае?

3 ответа

Решение

В JSON, 6 это номер шесть. "6" строка, содержащая цифру 6, Итак, ответ на вопрос "Можно ли цитировать числа json?" в основном "нет", потому что если вы поместите их в кавычки, они больше не числа.

Но должны ли парсеры принимать и "attr": 6, и attr: "6"?

Второй пример неверен, потому что attr должен быть в кавычках, например:

{"attr": "6"}

... является действительным и определяет объект со свойством attr со строковым значением "6", в то время как:

{"attr": 6}

... является действительным и определяет объект со свойством attr с числовым значением 6, и наконец:

{attr: 6}

...а также

{attr: "6"}

... оба недопустимы JSON, потому что имена свойств должны быть в двойных кавычках.

Если у MyParser есть метод getInt для получения числа с данным ключом, должен ли MyParser.getInt("attr") возвращать 6 в обоих случаях или генерировать исключение в последнем случае?

Это дизайнерское решение для человека, предоставляющего парсер, в основном выбор между getInt быть строгим (исключение, если вы попробуете на "attr": "6") или свободный (принуждение "6" в 6 и вернуть это). JavaScript обычно неэффективен, и поэтому может быть аргумент за его отсутствие; и наоборот, тот факт, что JavaScript не работает, иногда вызывает проблемы, что может быть аргументом в пользу строгости.

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

Вам не стоит слишком беспокоиться, поскольку современный язык программирования в настоящее время может неявно преобразовывать строку в число без дополнительного кода. Что-то, что вы должны принять во внимание, при использовании языков программирования, таких как JavaScript, когда вы используете == а также === при сравнении значений, === принимает во внимание тип значения в то время как == не так 6 === "6" вернусь false, в то время как 6 == "6" вернусь true,

Отвечая на ваш вопрос, он не выдаст исключение, если вы используете язык программирования, который обеспечивает неявное преобразование из строки в int.

Вы можете указать номер. Оба они действительны ("attr": 6 и "attr": "6"). Единственное, что нужно иметь в виду, что при извлечении значения необходимо использовать GetInt() в первом случае и GetString() во втором, а затем преобразовать эту строку в целое число.

Другие вопросы по тегам