Подтвердить что ты не робот

Можно ли указать номера JSON?

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

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

4b9b3361

Ответ 1

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

Но, если парсеры принимают оба "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 свободен, иногда вызывает проблемы, что может быть аргументом за то, что он строг.

Ответ 2

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

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

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