Можно ли цитировать числа в формате 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() во втором, а затем преобразовать эту строку в целое число.