JSON не учел Бесконечность и NaN; состояние JSON в ECMAScript?

Есть замечательные работы Хосе Валима Мокса и явные контракты . В нем говорится, что

всегда считают «mock» существительным , а не глаголом

blockquote>

. 112] функция генерации . Вам лучше создать генератор и поиздеваться над ним.

Примерно так:

defmodule Generator do
  @callback gen_id :: integer()
end

defmodule NanoGenerator do
  @moduledoc "Used in dev/prod"
  @behaviour Generator

  @impl true
  def gen_id() do
    get_nano_id() # external function or whatever
  end
end

defmodule TestGenerator do
  @moduledoc "Used in test"
  @behaviour Generator

  use Agent # to store state
  @ids ~w|foo foo bar|

  @impl true
  def gen_id() do
    id = # get the counter from Agent, and increase it
    @ids[id]
  end 
end

Теперь у вас все готово вернуть все, что вы хотите из генератора.

160
задан Nathan 21 September 2016 в 16:01
поделиться

3 ответа

Причина указана на странице ii в Стандартный ECMA-404 Синтаксис Обмена данными JSON, 1-й Выпуск

JSON является агностиком о числах. На любом языке программирования может быть множество типов числа различных мощностей и дополнений, зафиксированных или плавание, двоичный файл или десятичное число. Это может сделать обмен между различными языками программирования трудным. JSON вместо этого предлагает только представление чисел, которые используют люди: последовательность цифр. Все языки программирования знают, как понять последовательности цифры, даже если они не соглашаются относительно внутренних представлений. Этого достаточно для разрешения обмена.

причина не, как многие утверждали, из-за представлений NaN и Infinity сценарий ECMA. Простота является базовым принципом разработки JSON.

, поскольку это столь просто, не ожидается, что грамматика JSON будет когда-либо изменяться. Это дает JSON, как основополагающая нотация, огромная устойчивость

0
ответ дан 23 November 2019 в 21:33
поделиться

Infinity и NaN aren 't ключевые слова или что-то особенное, это просто свойства глобального объекта (как и undefined ) и, как таковые, могут быть изменены. По этой причине JSON не включает их в спецификацию - по сути, любая истинная строка JSON должна иметь тот же результат в EcmaScript, если вы выполняете eval (jsonString) или JSON.

87
ответ дан 23 November 2019 в 21:33
поделиться

Не могли бы вы адаптировать шаблон нулевого объекта , и в вашем JSON представьте такие значения как

"myNum" : {
   "isNaN" :false,
   "isInfinity" :true
}

Затем при проверке вы можете проверить тип

if (typeof(myObj.myNum) == 'number') {/* do this */}
else if (myObj.myNum.isNaN) {/* do that*/}
else if (myObj.myNum.isInfinity) {/* Do another thing */}

, который я знаю в Java, вы можете переопределить методы сериализации, чтобы реализовать такую ​​вещь. Не знаю, откуда у вас сериализация, поэтому я не могу подробно рассказать о том, как реализовать это в методах сериализации.

16
ответ дан 23 November 2019 в 21:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: