Данные и таблицы · CSV Очиститель
Преобразование между CSV и JSON: формы, типы и что теряется
· Как это работает
csv JSON форматы данных
CSV — это простой текст, а JSON — это вложенные типизированные данные, поэтому преобразование между ними требует принятия решений. В этом посте объясняются распространенные формы JSON для табличных данных, как выводятся или нет типы и что не может пережить цикл туда и обратно.
API требует JSON, экспорт — CSV, и каждое число поступает в виде строки — почему эти два формата расходятся в отношении типов
При экспорте электронной таблицы может отображаться 42 без указания того, означают ли эти символы количество, код продукта или идентификатор. JSON может отличить число от строки, но источник CSV не может обеспечить это различие. Поэтому ToolAcre выбирает консервативное представление: каждая ячейка становится строкой JSON, включая цифры, правильные слова и пустые ячейки.
Это решение сохраняет текст, такой как 0012, нетронутым и делает преобразование предсказуемым для интеграции API. Это также означает, что нижестоящий код должен привести поля к своей собственной схеме, прежде чем выполнять арифметические действия. Обработка сгенерированного файла как уже напечатанного просто перемещает предположение из преобразователя в менее видимый код приложения.
Обычная целевая форма — массив объектов, связанных заголовком, и поэтому заголовки должны быть чистыми и уникальными.
Маршрут создает массив верхнего уровня с одним объектом для каждой строки данных. Ячейки заголовка становятся ключами объекта, а значения берутся из тех же позиций столбцов. Пустой третий заголовок становится столбцом_3, а второй заголовок с именем id становится id_2 вместо перезаписи первого поля id.
Чистые, уникальные имена полезны, но конвертер не преобразует их в нижний регистр, не транслитерирует и не заменяет пробелы. Он обрезает заголовок только во время вычисления ключа, а затем при необходимости изобретает позиционное имя или числовой суффикс. Если для API требуется customer_email, а не адрес электронной почты клиента, сознательно переименуйте этот столбец, прежде чем полагаться на выходной контракт.
Альтернативные формы — массив массивов и объектов, ориентированных на столбцы, и когда каждая из них подходит лучше.
В схеме предлагались массивы массивов и объекты, ориентированные на столбцы, в качестве выбираемых целей. Это разумный дизайн данных, но этот интерфейс их не предлагает. Его выходные данные всегда представляют собой массив JSON плоских записей с ключом первой строки CSV и с отступом в два пробела для удобства чтения.
Этот узкий выбор устраняет двусмысленность относительно того, где находится имя столбца, и сохраняет одинаковый формат всех записей. Если другой потребитель ожидает массивы, преобразуйте загруженный JSON в соответствии со схемой этого потребителя. Утверждение, что ToolAcre выбирает один из нескольких макетов, будет описывать элементы управления и ветви, которые не существуют в конфигурации или коде панели.
Этот преобразователь создает одну форму: массив плоских объектов верхнего уровня.
Никакого угадывания типа не происходит. Текст CSV 42 становится «42», false становится «false», а пробел становится «», а не нулевым. Это явно проявляется в записи и реализации инструмента, которые сопоставляют ячейки непосредственно со свойствами строки. Маршрут не проверяет столбец и не решает, что все непустые значения являются числовыми.
Сохранение строк также отделяет эту статью от опубликованного обсуждения приложений для работы с электронными таблицами, меняющих ведущие нули, даты и длинные идентификаторы. Здесь дело в фактическом контракте преобразователя: он избегает такого рода принуждения. Потребители по-прежнему несут ответственность за анализ известных количеств и оставление идентификаторов нетронутыми.
Типы сохраняются в виде текста; ToolAcre не выполняет никаких выводов
В обратном направлении ToolAcre принимает массив верхнего уровня JSON, элементы которого являются объектами. Он создает столбцы из объединения ключей каждого объекта в порядке их появления, поэтому поле, введенное более поздней записью, не теряется. Отсутствующие, нулевые и неопределенные свойства становятся пустыми ячейками CSV.
Объект или массив, хранящийся внутри свойства, сериализуется как текст JSON внутри этой ячейки. Это сохраняет текстовое представление, но не превращает вложенную структуру в дополнительные столбцы или строки. Корень, не являющийся массивом, и массив, содержащий примитивные значения, отклоняются, поскольку ни один из них не соответствует модели таблицы, которую поддерживает этот маршрут.
JSON-to-CSV принимает массив объектов и записывает вложенные значения в виде текста JSON.
Рассмотрим имя, активный, количество, за которым следует Ада, true, 007. Результатом JSON является массив, содержащий объект с именем «Ada», активным «true» и счетчиком «007». Преобразование этого массива плоских объектов обратно создает те же три текстовые ячейки, поскольку никакой вывод типа не удалил нули или не преобразовал слово, имеющее логический вид.
Теперь добавьте пустой заголовок перед другим значением. Ключ JSON становится столбцом_4, поэтому данные остаются доступными, даже если имя источника отсутствует. Однако добавьте дополнительную ячейку за пределами ширины заголовка, и загрузчик предупредит о неровной строке; эта лишняя ячейка не имеет ключа и отсутствует в JSON.
Что здесь не распространяется — глубокая вложенность JSON, проверка схемы и потоковая передача очень больших документов JSON.
Маршрут не является средством проверки схемы, рекурсивным выравнивателем или потоковым процессором JSON. Он принимает одну документированную форму и сообщает о недопустимом JSON или неподдерживаемых корнях с определенной ошибкой. Записям с глубокой вложенностью требуется сопоставление, разработанное вокруг их домена, а не автоматическое обещание, что пунктуация в ключе создает структуру.
Проверка входного файла разрешает файлы до настроенного 50 MB, а анализ CSV происходит в рабочем процессе. Эти факты не подтверждают потоковую передачу: текст файла и завершенные строки по-прежнему материализуются для преобразования. Для очень больших рабочих процессов JSON используйте систему, реализация которой явно документирует инкрементный анализ, а не выводит его здесь.
Проверка схемы, примитивные массивы и корни, не являющиеся массивами, находятся за пределами принятой формы.
Преобразование — это видимый набор вариантов: первая строка в качестве ключей, плоские объекты в качестве записей и строки в качестве значений. ToolAcre делает этот выбор стабильным, а не угадывает по выборке. Пустые и повторяющиеся заголовки получают детерминированные ключи, в то время как неровный ввод появляется до того, как неназванное избыточное значение может исчезнуть незамеченным.
Используйте предварительный просмотр, чтобы проверить разделитель и форму строки, устранить предупреждения, а затем загрузить или скопировать файл JSON. Полученный файл подходит для кода, знающего собственную схему. Она намеренно не является заменой этой схемы, а ее ограничения защищают текстовые идентификаторы во время изменения формата.