2013-03-12 3 views
24

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

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

ответ

52

В 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 («атр») возвращает 6 в обоих случаях или выбросить исключение в последнем случае?

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

3

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

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

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

Смежные вопросы