Как предотвратить удаление десятичной точки при разборе JSON? - PullRequest
7 голосов
/ 02 апреля 2011

Если вы сделаете это ...

var parsed = JSON.parse('{"myNum":0.0}') ;

Затем, когда вы смотрите на parsed.myNum, вы просто получаете 0. (Достаточно справедливо.)

Если вы сделаете parsed.myNum.toString(), вы получите "0".

По сути, я ищу способ превратить это в строку "0.0".

Очевидно, что в реальной жизни я не контролирую ввод JSON, я получаю JSON из веб-службы ... Я хочу проанализировать JSON с помощью анализатора JSON браузера и определить разницу между числовые значения 0 и 0.0.

Есть ли способ сделать это, кроме ручного чтения строки JSON? В данном случае это не совсем возможно, для скорости мне нужно использовать собственный JSON-анализатор браузера. (Кстати, это расширение Chrome; не нужно беспокоиться о том, что оно работает в других браузерах.)

Ответы [ 4 ]

6 голосов
/ 02 апреля 2011

Если 0.0 не заключено в кавычки в вашем JSON (т. Е. Это число, а не строка), то невозможно отличить его от 0, если вы не напишите свой собственный анализатор JSON.

5 голосов
/ 02 апреля 2011

Нет способа получить количество цифр от JSON.parse или eval. Даже если десятичное предложение IBM было принято комитетом EcmaScript, это число все равно будет проанализировано до числа с плавающей запятой IEEE 754.

Посмотрите http://code.google.com/p/json-sans-eval/source/browse/trunk/src/json_sans_eval.js на простой анализатор JSON, который вы можете изменить, чтобы сохранить точность информации.

1 голос
/ 02 апреля 2011
... parsed.myNum.toFixed( 1 ) ...

, где 1 - это число десятичных знаков

Редактировать: parsed.myNum - это число, parsed.myNym.toFixed( 1 ) будет строкой

Редактировать2: в этом случае вам нужно передатьзначение в виде строки {"myNum":'0.0'} и анализируется, когда требуются вычисления, или определяет десятичный разделитель, анализируемый номер и использует позицию десятичного разделителя, когда требуется строка

0 голосов
/ 02 апреля 2011

Это не должно иметь значения, 00000.00000 - это 0, если вы попытаетесь JSON.parse('{"myNum":0.00001}'), вы увидите значение { myNum=0.0001 } Если вам действительно нужно, чтобы оно содержало десятичную дробь, вам нужно сохранить его в строке JSON.parse('{"myNum":"0.0"}')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...