Содержание
Записать в файл JSON—Обработка данных событий (10.7.1)
Наверх
В этом разделе
- Примечания по использованию
- Параметры
Выходной коннектор Записать в файл JSON может использоваться для записи событий GeoEvent, интерпретированных как универсальный файл JSON, в файл JSON.
Примечания по использованию
- Этот выходной коннектор связывает исходящий адаптер универсального файла JSON с исходящим транспортом файла.
- Зарегистрированная папка сервера может быть задана с помощью абсолютного или относительного пути.
- Если используется относительный путь, учетной записи службы Windows, под которой запущен GeoEvent Server, требуется разрешение на чтение/запись в папку.
- Рекомендуется использовать абсолютные пути, например, C:\GeoEvent\input для свойства Папка.
- Свойство Подпапка позволяет указать подпапку, связанную с зарегистрированной папкой сервера.
- При перезапуске выхода GeoEvent Server создаст новый файл в зарегистрированной системной папке.
- В зависимости от скорости и объема обрабатываемых событий GeoEvent рекомендуется увеличить Размер перехода к следующему файлу (КБ) на значение больше значения по умолчанию 1, чтобы избежать создания каскада файлов JSON, с которыми Windows не сможет справиться.
- Этот выходной коннектор представляет каждую запись события как отдельный объект JSON в файле JSON. С установленными по умолчанию Верхним колонтитулом файла, Нижним колонтитулом файла и Разделителем событий, каждый объект JSON организуется в корректный массив JSON с элементами, разделенными запятой. Открывающая квадратная скобка Верхнего колонтитула файла определяет начало массива JSON, а закрывающая квадратная скобка Нижнего колонтитула файла определяет конец массива JSON. Запятая Разделителя событий разделяет каждый объект JSON.
Параметры
Параметр | Описание |
---|---|
Имя | Описательное имя выходного коннектора, используемое для справки в GeoEvent Manager. |
Папка | Зарегистрированная системная папка, под которой будут создаваться и записываться файлы. |
Префикс имени файла | Задает имя выходного файла, который GeoEvent Server будет создавать и в который будут записываться данные. К имени файла добавляется дата / время первого создания файла. По умолчанию – output. Пример: префикс имени файла output, созданного 19 марта 2019 года в 2:30:05 pm, в результирующем имени файла будет output2019-03-19_14-30-05.out. |
Подпапка | Указывает имя подпапки (или подкаталога) относительно зарегистрированной системной папки, под которой будут создаваться и записываться файлы. Это свойство следует оставить пустым, если вложенная папка не существует. Для этого свойства отсутствует значение по умолчанию. Пример: при указании зарегистрированной системной папки как C:\GeoEventи подпапок как output GeoEvent Server создаст свой файл в C:\GeoEvent\outputпредполагая, что путь к файлу существует и доступен учетной записью службы Windows, запускающей ArcGIS GeoEvent Server. |
Расширение файла | Расширение файла, используемое при создании новых файлов. По умолчанию для этого свойства используется json, что означает, что GeoEvent Server создаст файл JSON. |
Метод перехода к следующему файлу | Указывает метод, используемый для определения того, когда GeoEvent Server прекратит запись в текущий файл и начнет запись в новый файл. Для Метода перехода к следующему файлу применимы значения По размеру или По времени. Значение по умолчанию – По времени.
|
Размер перехода к следующему файлу (КБ) (Условия) | Задает максимальный размер файла в килобайтах (КБ), который может быть достигнут до того, как GeoEvent Server прекратит запись. После того как максимальный размер файла достигнут, GeoEvent Server создаст новый файл, и продолжит запись в него. По умолчанию – 1 килобайт. Это свойство показывается, когда для свойства Метод перехода к следующему файлу задано значение По размеру, и скрыто, если выбрано значение По времени |
Частота перехода к следующему файлу (Условия) | Задает частоту, с которой GeoEvent Server прекратит запись в текущий файл и вместо этого создаст новый файл для начала записи. Могут быть использованы значения времени прекращения Каждый час, Каждый день или Каждый месяц. По умолчанию – Каждый день.
Это свойство показывается, когда для свойства Метод перехода к следующему файлу задано значение По времени, и скрыто, если выбрано значение По размеру |
Возраст очистки файлов (минуты) | Указывает возраст в минутах, с которого старые файлы будут обрабатываться в соответствии с Методом очистки файлов. По умолчанию – 4320 минут. Пример: каждые 3 дня (4320 минут) файлы будут либо удалены или помещены в архив. |
Метод очистки файлов | Метод, используемый для управления старыми файлами, достигшими Возраста очистки файлов (минуты). Доступные методы очистки файлов: Удалить и Архивировать. По умолчанию – Удалить.
|
Архивная папка (Условия) | Зарегистрированная системная папка, под которой будут архивироваться файлы, достигшие возраста очистки файлов (минуты). Для этого свойства отсутствует значение по умолчанию. Это свойство показывается, когда для Метода очистки файлов задано значение Архивировать, и скрыто, если выбрано значение Удалить |
Архивная подпапка (Условия) | Подпапка относительно Папки архива, под которой будут архивироваться файлы, достигшие возраста очистки файлов (минуты). Оставьте это свойство неуказанным, если подпапка для архивирования файлов отсутствует. Для этого свойства отсутствует значение по умолчанию. Это свойство показывается, когда для Метода очистки файлов задано значение Архивировать, и скрыто, если выбрано значение Удалить |
Форматированный JSON | Указывает, будет ли форматироваться исходный JSON (подготавливаться). Известен также как PJSON. По умолчанию для этого свойства задано Нет.
|
Верхний колонтитул файла | Символ(ы), который будет вставлен в начале каждого файла JSON. GeoEvent Server может использовать любой обычный символ ASCII или комбинацию символов в качестве верхнего колонтитула файла. По умолчанию – [ (левая скобка). |
Нижний колонтитул файла | Символ(ы), который будет вставлен в конце каждого файла JSON. GeoEvent Server может использовать любой обычный символ ASCII или комбинацию символов в качестве нижнего колонтитула файла. По умолчанию – ] (правая скобка). |
Разделитель событий | Символ, который будет использоваться для разделения каждой записи события в файле JSON. GeoEvent Server может применять любой обычный символ ASCII в качестве разделителя событий. По умолчанию – , (запятая). |
Отзыв по этому разделу?
В этом разделе
- Примечания по использованию
- Параметры
Что такое формат json и для чего он используется
Есть проблемы с ранжированием, проект не растет, хотите проверить работу своих специалистов по продвижению? Закажите профессиональный аудит в Семантике
Аудит и стратегия продвижения в Семантике
Получи нашу книгу «Контент-маркетинг в социальных сетях: Как засесть в голову подписчиков и влюбить их в свой бренд».
Подпишись на рассылку и получи книгу в подарок!
JSON — это текстовый формат обмена данными, основанный на мультипарадигменном языке программирования. Его основное назначение состоит в хранении и передаче структурированного потока информации.
При помощи простых правил формирования конструкций из символов в JavaScript, человек может обеспечить легкий и надежный способ хранения любого вида информации, будь то обычное число, целые строки или огромное количество различных объектов, выраженных в простом тексте.
Помимо этого, формат JSON используется для объединения между собой объектов и структуры данных в виде набора компонентов, формируя тем самым программные единицы, позволяющие хранить и обрабатывать сложные записи, состоящие из нескольких переменных разного типа.
После того как файл создан, содержащиеся в нем строки довольно легко перенаправить в другое положение Сети через любые пути передачи данных. Это связано с тем, что строка представляет собой обычный текст.
Что значит JSON
Несмотря на возможность использования практически во всех скриптовых языках, его название относится к JavaScript. Инструмент имеет следующие преимущества:
- Занимает сравнительно небольшой объем, компактен.
- Текстовое содержание может легко создаваться и поддаваться чтению вычислительной техникой и человеком.
- Можно без особого труда преобразовать в структуру практически для всех видов формальных языков, использующихся для создания компьютерных программ.
- Большинство языков программирования, будь то JavaScript, Ruby, Python или PHP, наделены функциями и специальными инструментами для чтения и редактирования файла.
В подавляющем большинстве случаев формат JSON используется для работы по передаче информации от сервера к браузеру. Этот процесс, как правило, происходит в «фоновом» режиме обмена браузера с web-сервером, а доставка осуществляется при помощи AJAX. Это обуславливается тем, что в процессе доставки данных отсутствует необходимость перезагружать страницу.
Работает это по следующему сценарию:
- К примеру, пользователь кликает по карточке товара в интернет-магазине.
- JavaScript, встроенный в браузер, чтобы сделать веб-страницы более функциональными, генерирует запрос при помощи AJAX к программному файлу сценарию PHP, который запущен на сервере. Благодаря этому происходит передача ID выбранного товара.
- Программный файл сценарий PHP принимает наименование товара, описание, стоимость и прочую информацию, которая содержится в базе.
- После этого формируется строка и передается браузеру.
- JavaScript принимает эту строку, восстанавливает содержащуюся в ней информацию из ее представления в закодированном виде, после чего выводит информацию о выбранном товаре на веб-страницу пользователя.
Все это происходит в считанные миллисекунды. Однако, если JavaScript отключен на компьютере по каким-либо причинам, веб-страница не загрузится либо будет отображаться с ошибками.
Как устроен формат JSON
В JSON типы данных подразделяются на несколько категорий: простые и сложные. К первому виду можно отнести, прежде всего, текстовые строки и числа, ко второму — объекты. В общей сложности выделяют шесть основных типов:
- Числительный. При этом числа могут быть как беззнаковыми целыми, так и целыми со знаком. В частности, здесь может содержаться дробная часть и представление действительных чисел в виде дробной части логарифма и порядка. Файл одинаково позволяет использование целых чисел и разделение с плавающей запятой. Этот способ применяется в JavaScript для всех числовых значений без исключений, однако в других математических библиотеках, в которых он используется, кодирование может происходить с использованием совершенно других алгоритмов.
- Произвольная последовательность (строка) символов латинского алфавита, цифр и элементов пунктуации (от нуля и символов юникод). Каждая последующая строка отделяется от предыдущей строки посредством парного знака препинания — кавычек («текст») либо с использованием символа, с написанием, обратным по отношению к обычному символу, косой черты.
- Литералы или константы, включаемые непосредственно в текст. Это может быть любое значение из true и false или их аналогов.
- Массив. Он представляет собой упорядоченный перечень символов от нуля и дальше. Каждый символ может быть представлен в любой форме.
- Объект. Это хаотично сложенный состав пар ключи/значение. Исходя из того, что основная функция объектов состоит в представлении абстрактного типа данных, рекомендуется (но это необязательное условие), чтобы ключи были уникальными.
- Пустое значение, обозначающееся словом «Null».
Интервалы между символами допускаются, если они будут использованы между синтаксическими единицами. Для этого применяются несколько символов: обычное отступление, горизонтальные текстовые вкладки и косая черта.
Чем открыть формат JSON
Текстовый формат обмена данными может быть представлен в популярных стандартах кодирования, которые дают возможность более компактно хранить и пересылать символы Unicode. В частности, по умолчанию здесь стоит UTF-8. Также могут применяться UTF-16 и UTF-32. Их использование обуславливается тем, что все три стандарта поддерживают весь набор символов.
Но, если они экранированы (не цитирование), чтобы использовать их как регулярное выражение, они могут быть написаны для представления символов в дополнительных плоскостях с применением UTF-16.
Самый простой способ открыть формат JSON — использовать Блокнот на ПК. Для этого необходимо создать и открыть новый текстовый документ, выбрать в левом верхнем углу «Файл», затем «Открыть».
Далее откроется окно проводника, посредством которого необходимо найти на ПК нужный файл, после чего нажать на кнопку «Все файлы».
Найдя нужный документ, следует нажать на кнопку проводника «Открыть».
Документ откроется и будет доступен для просмотра и редактирования.
Помимо этого, существуют сторонние программы для открытия формата JSON. Среди них можно отметить Altova XMLSpy, Notepad++, Komodo Edit, Sublime Text и т. д.
Как создать файл
Формат JSON, как правило, используется для работы (хранения и использования) служебной информации. Обычно это штатное расписание, которое не должен видеть ни разработчик, ни аудитория веб-ресурса.
Существует несколько способов создать файл с соответствующим расширением. Прежде всего, это можно сделать посредством обычного текстового редактора, являющегося частью операционной системы Microsoft Windows. Для этого необходимо открыть Блокнот, вставить соответствующий код и сохранить документ в обычном и единственно доступном расширении. После этого необходимо поменять его на нужный вариант.
Второй способ подразумевает использование сторонних сервисов. Наиболее популярным является JSON Editor Online. Он намного удобнее, чем вариант с Блокнотом. Интерфейс сервиса представлен в виде двух рабочих зон.
В первой происходит непосредственно работа по формированию данных, во второй зоне размещаются инструменты для этого. После того как процесс создания будет окончен, необходимо нажать на кнопку «Save» и выбрать способ сохранения результата: на диск или онлайн.
Как уже отмечалось, использование онлайн-сервиса намного удобнее Блокнота. Связано это с тем, что сервис в процессе работы автоматически определяет синтаксические ошибки и выделяет их, чтобы пользователь мог заметить упущения и сразу же исправить.
JSON Editor, JSON formatter, query JSON
JSON Editor Online — это веб-инструмент для просмотра, редактирования, форматирования, восстановления, сравнения, запроса, преобразования, проверки и совместного использования ваших данных JSON.
О JSON Editor Online
JSON Editor Online — это универсальный высококачественный инструмент для редактирования и обработки данных JSON. Это один из лучших и самых популярных инструментов, который пользуется высокой степенью удовлетворенности пользователей и совершенно бесплатен. Редактор предлагает все, что вам нужно, в одном месте: от форматирования и улучшения ваших данных JSON до сравнения документов JSON или запросов к вашим данным JSON. JSON — это наиболее часто используемый формат данных между серверами и браузером, а онлайн-редактор JSON — незаменимый инструмент для разработчиков интерфейсов и серверных частей, работающих с данными JSON в своей повседневной жизни.
Онлайн-редактор JSON разработан и поддерживается Джосом де Йонгом, увлеченным своим делом старшим инженером-программистом с более чем 20-летним опытом работы в этой области. Джос создал редактор исходя из личных потребностей, ежедневно работая с API и базами данных на основе JSON в качестве комплексного инженера.
Если вы предпочитаете классическую версию JSON Editor Online, вы все равно можете ее использовать. Но прежде чем вы это сделаете, пожалуйста, дайте нам знать, почему вам это нравится больше. Вы можете сообщить о своей проблеме или отправить электронное письмо на адрес [email protected]
JSON Editor Online offers the following features:
- Online JSON editor and JSON viewer
- JSON formatter and JSON beautifier
- Query and transform JSON
- Compare JSON documents
- Repair JSON documents
- JSON Schema validation
- Загрузка, сохранение и совместное использование JSON в Интернете
- Экспорт JSON в CSV
- Обработка больших файлов
- Автономная поддержка
Текущая версия: 6. 9.4
Новости
Новые и настраиваемые цвета темы
2022-10-10
Цвета темы изменены с зеленого+коричневого на два более спокойных зеленых цвета. И вы можете выбрать альтернативные цвета темы на свой вкус. Цвета темы и светлый или темный режим можно выбрать через пункт меню «Тема» в правом верхнем углу приложения.
Старые, классические цвета темы:
Новые, настраиваемые цвета темы:
Анализатор JSON без потерь
2022-09-30
Онлайн-редактор JSON теперь может переключаться между двумя парсерами: собственным парсером JSON (встроенным в браузер) или новым парсером JSON без потерь. В отличие от собственного синтаксического анализатора, синтаксический анализатор JSON без потерь может обрабатывать длинные числа, такие как 9123372036854000123
, и может поддерживать форматирование таких чисел, как 4.0
.
С первых дней появления JSON Editor Online, более 10 лет назад, пользователи регулярно сообщали о проблемах с редактором, иногда искажающих большие числа в их документах JSON. Мы не смогли решить эту проблему до сих пор. В этой статье мы подробно объясним проблему и покажем, как мы решили ее в онлайн-редакторе JSON: почему JSON.parse искажает большие числа и как это решить?
Для мобильных устройств
2022-08-29
Онлайн-приложение JSON Editor теперь оптимизировано для мобильных устройств, вы можете использовать его на небольших экранах и сенсорных устройствах!
Безопасное соединение и открытые URL-адреса через прокси-сервер
2022-07-19
Онлайн-редактор JSON теперь обеспечивает безопасное соединение (https), что лучше для безопасности. Однако это не позволяет загружать URL-адреса из незащищенного соединения (http). Для этого теперь вы можете загружать эти URL-адреса через прокси-сервер, если они общедоступны в Интернете.
Экспорт в CSV
07.06.2022
Новая полезная функция: теперь вы можете экспортировать JSON в CSV через меню «Сохранить», «Экспорт в CSV». Типичным вариантом использования является загрузка данных JSON в онлайн-редактор JSON и предварительная обработка их там путем фильтрации, сортировки и выбора соответствующих свойств. Затем вы можете экспортировать свои данные в CSV и открыть их в приложении для работы с электронными таблицами, чтобы выполнить дальнейший анализ, например построить графики.
Список изменений
Хотите узнать больше? Обзор, описывающий всю историю, доступен в файле changelog.html.
Часто задаваемые вопросы (FAQ)
Как редактировать файл JSON?
Скопируйте и вставьте файл JSON в редактор JSON или загрузите его с диска через меню или с помощью перетаскивания. Затем вы можете редактировать содержимое так же, как вы используете любой текстовый редактор: введите новое содержимое с помощью клавиатуры и щелкните правой кнопкой мыши, чтобы открыть контекстное меню с такими действиями, как копирование/вставка, вставка, удаление. Вы можете узнать больше в Документации.
Как отформатировать файл JSON?
Вы можете использовать редактор как средство форматирования json. В режиме кода вы можете вставить файл JSON в редактор и нажать кнопку «Формат» в меню. В режиме дерева вы можете просто вставить файл и скопировать его снова: содержимое будет автоматически отформатировано. Кроме того, вы также можете использовать кнопку «Копировать в формате» из меню, чтобы сделать это одним щелчком мыши. Читать далее.
Как украсить данные JSON?
Формат JSON такой же, как украсить JSON: вы делаете файл JSON читабельным, стилизуя его с помощью пробелов, новых строк и отступов. Вкратце: вставьте файл JSON, затем нажмите кнопку «Формат» в режиме кода или выберите «Копировать отформатированный» в меню. Вот как вы делаете свой JSON красивым. Читать далее.
Могу ли я использовать редактор JSON в качестве средства очистки JSON?
Да, обязательно! Очистка JSON аналогична «украшению» или «форматированию» JSON: вы делаете данные JSON аккуратно читаемыми. Таким образом, вы можете использовать JSON Editor Online в качестве средства очистки JSON, открыв документ и нажав кнопку «Формат».
Как запросить данные JSON?
Вы можете запросить данные JSON, нажав кнопку «Преобразовать» в меню или между двумя панелями. Откроется модальное окно, в котором вы можете написать запрос, просмотреть предварительный просмотр, а затем преобразовать данные JSON. Читать далее.
Как сравнить файлы JSON?
Вы можете сравнить файлы JSON, открыв их в левой и правой панели редактора. Нажмите кнопку «Сравнить» в разделе «Различия» между двумя панелями и убедитесь, что вы переключили обе панели в режим «Дерево». Все различия JSON будут выделены. Читать далее.
Как восстановить данные JSON?
Просто поместите свои данные в JSON Editor Online. Во многих случаях он автоматически восстановит данные для вас, а если это невозможно, он укажет вам место, где возникла проблема, и поможет вам ее исправить. Читать далее.
Как исправить ошибку формата JSON?
Откройте файл JSON в онлайн-редакторе JSON, затем нажмите кнопку «Формат» в меню в режиме text
. Читать далее.
Как проверить, действителен ли файл JSON?
Просто откройте файл JSON в онлайн-редакторе JSON, чтобы проверить, действителен ли сам документ. Если нет, редактор укажет на ошибку и, если возможно, предложит автовосстановление документа.
Что такое валидатор JSON?
Средство проверки JSON проверяет, соответствует ли ваш документ JSON спецификации JSON. Кроме того, вы можете использовать средство проверки схемы JSON, чтобы проверить, соответствует ли содержимое вашего документа указанной схеме.
Что такое корректор и валидатор JSON?
Украшающий JSON аккуратно форматирует свое содержимое с помощью отступов и новых строк, чтобы сделать его более читабельным. Разработчики программного обеспечения часто проверяют JSON, а затем форматируют его за один раз, чтобы проверить документ.
Зачем использовать редактор в качестве средства проверки JSON?
Использование онлайн-редактора JSON полезно для проверки, исправления, форматирования и запроса данных JSON на лету. Однако при работе с файлами конфигурации JSON в проекте может быть удобнее использовать собственную IDE. Существуют различные категории инструментов JSON, каждая со своими плюсами и минусами. Что лучше использовать, зависит от вашего варианта использования.
Как проверить данные JSON на соответствие схеме JSON?
Откройте файл JSON в редакторе. В меню выберите «Параметры», «Схема JSON». Откроется модальное окно, в котором вы можете настроить схему JSON. Читать далее.
Как преобразовать JSON в CSV?
Откройте файл JSON в редакторе. В меню выберите «Сохранить», «Экспортировать в CSV». Откроется модальное окно, где вы увидите предварительный просмотр и сможете сохранить данные CSV в виде файла или скопировать его в буфер обмена. Читать далее.
Какой редактор JSON лучший?
Опрос показывает, что 85% людей, использующих JSON Editor Online, очень им довольны. Они в подавляющем большинстве положительно отзываются о нем и называют его лучшим форматировщиком и редактором JSON. Они очень положительно отзываются о качестве редактора «все в 1», который уже более 10 лет зарекомендовал себя как полезный для миллионов пользователей. Людям также нравится тот факт, что это бесплатный редактор JSON.
Какой форматировщик JSON лучше всего?
Этот вопрос более или менее совпадает с предыдущим вопросом «Какой редактор JSON лучший?». JSON Editor Online также является средством форматирования и улучшения JSON. Форматирование — это лишь одна из многих функций, которые он предлагает.
Безопасны ли средства форматирования JSON?
В общем да, можно не волноваться. JSON Editor Online принимает все возможные меры: он обеспечивает безопасное HTTPS-соединение и постоянно обновляет все используемое программное обеспечение. Все, что вы делаете, остается внутри вашего браузера, и никакие данные не передаются нигде, кроме случаев, когда вы сохраняете документ в облаке. Облачные документы общедоступны для всех, у кого есть идентификатор документа, поэтому убедитесь, что вы не сохраняете документы с конфиденциальной информацией в облаке.
Есть ли темный режим?
Да! JSON Editor Online имеет светлый и темный режимы. Вы можете переключить это в главном меню сверху.
Можно ли открывать большие файлы JSON?
Да! JSON Editor Online может работать с большими файлами размером до 500 МБ 🚀.
Почему JSON.parse искажает большие числа и как это решить?
С первых дней появления JSON Editor Online, более 10 лет назад, пользователи регулярно сообщали о проблемах с редактором, иногда искажающих большие числа в их документах JSON. Мы не смогли решить эту проблему до сих пор. В этой статье мы подробно объясним проблему и покажем, как мы решили ее в онлайн-редакторе JSON.
Проблема с большими числами
Большинство веб-приложений имеют дело с данными, поступающими с сервера. Данные принимаются в виде документа JSON в виде обычного текста и анализируются в объект или массив JavaScript, чтобы вы могли читать свойства и выполнять другие действия. Обычно данные анализируются с помощью функции JSON.parse
, которая встроена в JavaScript и работает очень быстро и удобно. И обычно это просто работает как шарм, и никто даже не думает об этом. Пока это не так.
Формат данных JSON чрезвычайно прост и является подмножеством JavaScript. Таким образом, он полностью взаимозаменяем с JavaScript. Вы можете вставить документ JSON в файл JavaScript, и это просто допустимый JavaScript. Вы не ожидаете никаких возможных проблем с JSON в JavaScript, но есть один сложный случай, который может испортить ваши данные: большие числа. Вот допустимая строка JSON:
{"count": 9123372036854000123}
Когда мы анализируем это в JavaScript и читаем ключ «count», мы получаем:
9123372036854000000
Проанализированное значение повреждено до нуля: последние три цифры обнуляются. Является ли это проблемой, зависит от того, имеют ли эти последние цифры значение, но в целом знание того, что это может произойти, вероятно, вызывает у вас неприятное чувство.
Почему JSON.parse искажает большие числа?
Длинное число, например 9123372036854000123
является действительным как JSON, так и действительным JavaScript. Что-то идет не так, когда JavaScript преобразует значение в число. Первоначально в JavaScript был только один числовой тип: Number. Это 64-битное значение с плавающей запятой, аналогичное значению Double
в C++, Java или C#. Это значение с плавающей запятой может хранить около 16 цифр. Следовательно, он не может полностью представить число вроде 9123372036854000123
, состоящее из 19 цифр. В этом случае последние три цифры теряются, что искажает значение.
То же самое происходит при хранении дробей в значении с плавающей запятой: когда вы вычисляете 1/3
в JavaScript, результат будет следующим:
0,3333333333333333
номер останавливается примерно после 16 цифр.
Итак, откуда берется такое большое значение, как 9123372036854000123
в документе JSON? Ну, в других языках, таких как Java или C#, есть другие числовые типы данных, такие как Long 9.0058 .
Long
— это 64-битное значение, которое может содержать целое число, содержащее до 20 цифр. Причина, по которой он может содержать больше цифр, заключается в том, что ему не нужно хранить экспоненциальное значение, как это делает значение с плавающей запятой. Таким образом, в таком языке, как Java, у вас может быть значение Long
, которое не может быть правильно представлено в типе JavaScript Number
или в эквивалентном типе Double
в других языках, если на то пошло.
JavaScript Число
(или лучше: любое значение с плавающей запятой) имеет еще несколько ограничений: значение может быть переполнено или потеряно. Например, 1e+500
становится Infinity
, а 1e-500
становится 0
. Однако эти ограничения редко являются проблемой в реальных приложениях.
Как предотвратить искажение чисел с помощью JSON.parse?
Эта проблема анализа больших чисел в JavaScript была повторяющимся запросом от пользователей https://jsoneditoronline.org/ на протяжении многих лет. Как и большинство веб-редакторов JSON, он также использовал родной JSON.parse
и обычные числа JavaScript под капотом, поэтому он страдал от ограничений, описанных выше.
Первая мысль может быть: подождите, но JSON.parse
имеет необязательный аргумент Reviver
, позволяющий анализировать содержимое по-другому. Проблема, однако, в том, что сначала текст анализируется в число
, а затем передается в оживитель
. Так что к тому времени будет уже слишком поздно, и значение уже будет повреждено.
Чтобы решить эту проблему, вы просто не можете использовать встроенный JSON.parse
, и вместо этого вам придется использовать другой анализатор JSON. Для этого доступны различные отличные решения: lossless-json, json-bigint, js-json-bigint или json-source-map. Большинство этих библиотек используют прагматичный подход и анализируют длинные числа прямо в относительно новый тип данных JavaScript BigInt
. Библиотека lossless-json была разработана специально для JSON Editor Online. Он требует более гибкого и мощного подхода, чем решения JSON BigInt.
По умолчанию lossless-json анализирует числа в облегченном классе LosslessNumber
, который содержит числовое значение в виде строки. Это сохраняет любое значение и даже сохраняет форматирование, например нуль в конце значения 4.0
. При работе с ним LosslessNumber
будет преобразован либо в Number
, либо в BigInt
, либо будет выдано сообщение об ошибке, если это небезопасно. Библиотека позволяет вам передавать свой собственный анализатор чисел, поэтому вы можете применять свою собственную стратегию для работы с числовыми значениями. Может быть, вы хотите преобразовать длинные числовые значения в BigInt
или передавать значения в какую-нибудь библиотеку BigNumber
. Вы можете выбрать, хотите ли вы генерировать исключение при потере числовой информации или молча игнорировать определенные классы потери информации.
Итак, сравнивая родную функцию JSON.parse
и lossless-json, вы получаете следующее:
import {parse, stringify} from 'lossless-json' const text = '{"decimal":2.370,"long":9123372036854000123,"big":2.3e+500}' // JSON.parse потеряет несколько цифр и целое число: console.log(JSON.stringify(JSON.parse(текст))) // '{"десятичный":2.37,"длинный":9123372036854000000, "большой": ноль}' // УРА!!! // LosslessJSON.parse сохранит все числа и даже форматирование: console.log(stringify(parse(text))) // '{"decimal":2.370,"long":9123372036854000123,"big":2.3e+500}'
Решает ли использование синтаксического анализатора LosslessJSON все проблемы?
К сожалению, нет. Это немного зависит от того, что вы хотите сделать с данными после их разбора, но обычно вы хотите что-то с ними сделать. Отобразите данные на экране, проверьте их, сравните, отсортируйте и т. д. Например, в онлайн-редакторе JSON вы можете редактировать значения, преобразовывать документ (запрашивать, фильтровать, сортировать и т. д.), сравнивать два документа или проверять документ против схемы JSON. как только вы представите BigInt
значений или LosslessNumbers
, все операции, которые вы хотите выполнить, должны будут поддерживать эти типы значений.
Наличие данных со значениями BigInt
или LosslessNumbers
, скорее всего, вызывает проблемы со сторонними библиотеками, которые не знают об этих типах данных. Например, JSON Editor Online поддерживает экспорт ваших данных JSON в CSV и использует для этого отличную библиотеку json2csv. Эта библиотека не знает о BigInt
или LosslessNumber
типов и не будет корректно отображать эти типы данных. Чтобы это работало, данные JSON, содержащие значения LosslessNumbers
или BigInt
, должны быть сначала преобразованы во что-то, понятное библиотеке.
Даже без участия сторонних библиотек работа со значениями BigInt
может привести к сложным проблемам. При работе со смесью больших целых чисел и обычных чисел JavaScript может незаметно преобразовать один числовой тип в другой, что может привести к ошибкам. В следующем примере кода показано, как это может пойти не так:
const a = 91111111111111e3 // обычное число const b = 91111111111111000n // большое число console.log(a == b) // возвращает false (должно быть true) console.log(a > b) // возвращает true (должно быть false)
В этом примере вы видите две константы a и b, содержащие одно и то же числовое значение. Но один из них — число, а другой — BigInt
, и использование операторов с обычными операторами, такими как ==
и >
, может привести к неправильным результатам.
Заключение: может потребоваться много усилий, чтобы заставить большие числа работать в приложении. Таким образом, лучше всего попытаться избежать необходимости иметь дело с ними в первую очередь. Это сделает вашу жизнь намного проще. Если вам действительно приходится иметь дело с большими значениями, вам нужно использовать альтернативный анализатор JSON, например lossless-json. Чтобы не попасть в трудно отлаживаемые проблемы, связанные с наличием BigInt
или LosslessNumber
типов данных, полезно явно определить модели данных с помощью TypeScript. Таким образом, вы заранее знаете, где находятся места, которые должны быть в состоянии работать с этими специальными типами данных, и вы можете принять меры, вместо того, чтобы ваше приложение молча вышло из строя.
JSON Editor Online теперь может безопасно работать с большими числами
На сегодняшний день JSON Editor Online полностью поддерживает большие числа, поэтому вам больше не нужно беспокоиться о поврежденных значениях. Он интегрировал библиотеку lossless-json и позаботился о том, чтобы все функции редактора могли работать с большими числами: от форматирования, сортировки и запросов до экспорта в CSV. В качестве побочного эффекта теперь поддерживается даже форматирование чисел, а дублирующиеся ключи теперь обнаруживаются благодаря новому синтаксическому анализатору LosslessJSON.