Русский

Данные и таблицы · CSV Очиститель

CSV против JSON: два формата данных и идеи о структуре, стоящей за ними

· Фон

csv JSON форматы данных

Плоская сетка из строк и столбцов рядом с разветвляющимся объектом JSON, вложенная ветвь которого не может поместиться напрямую
Оригинальная векторная иллюстрация ToolAcre

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

Один и тот же список клиентов выглядит совершенно по-разному как CSV и как JSON — почему каждый формат кодирует разное представление о структуре

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

ToolAcre преобразует общее пересечение: плоский заголовок плюс строки данных становятся массивом плоских объектов верхнего уровня. Он не превращает знаки препинания в заголовках в ответвления и не выводит массивы из повторяющихся столбцов. Понимание этой границы не позволит плоскому преобразователю ошибочно принять за разработчика модели данных.

CSV в виде сетки — строки и столбцы, позиционное значение и ничего, кроме текста

В этой реализации CSV представляет собой прямоугольную таблицу строк. Первая строка содержит имена заголовков, а каждая последующая ячейка получает значение из позиции своего столбца. Короткие строки дополняются, а длинные предупреждаются, поскольку позиция работает надежно только тогда, когда ширина строки соответствует заголовку.

Нет собственных числовых, логических, объектных или нулевых ячеек. Кавычки защищают синтаксис, но не определяют тип. Последовательность цифр и слово true остаются текстовыми значениями, что обеспечивает стабильность идентификаторов и требует от потребителя применить схему там, где она действительно существует.

В ToolAcre ячейки CSV представляют собой строки, расположенные под одной строкой заголовка.

В рабочей книге запрашивается информация о происхождении JSON начала 2000-х годов и истории стандартов, но этот репозиторий не является источником этих дат или публикаций. Поддающееся проверке поведение заключается в том, что браузер использует `JSON.parse` и `JSON.stringify`, принимая массив объектов верхнего уровня для преобразования в таблицу.

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

JSON история стандартов находится вне хранилища; поддерживаемая форма времени выполнения проверяема

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

Это самоописание имеет размер и стоимость повторения, но делает каждую запись JSON понятной без отдельного размещения заголовка. И наоборот, изменение порядка столбца CSV без его заголовка теряет смысл. При преобразовании имена и позиции должны сохраняться в паре по всей таблице.

Деревья и таблицы: вложенность, массивы и необязательные ключи, и почему у них нет естественного места в ряду

Значения JSON могут содержать объекты и массивы, а одна ячейка CSV не может иметь собственное ветвление. В обратном направлении ToolAcre сериализует вложенное значение с `JSON.stringify` и помещает этот текст JSON в одну ячейку. Он не создает столбцы Address_city или дополнительные строки тегов.

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

Рабочий пример — одна запись с вложенным адресом и списком тегов, показанная в JSON, а затем помещенная в столбцы CSV.

Плоская строка CSV `id,name,city`, за которой следует `001,Ada,London`, полностью преобразуется в один объект с тремя строковыми свойствами. Если вместо этого JSON содержит `address: {city: "London"}` и `tags: ["math","code"]`, обратное преобразование записывает эти вложенные значения как строки JSON в столбцах адреса и тегов.

Повторная загрузка этого CSV дает строки, содержащие синтаксис JSON, а не реконструированные вложенные значения. Более позднее приложение могло бы проанализировать эти ячейки по своей собственной схеме, но ToolAcre этого не делает. Проработанное сравнение точно определяет, где заканчивается структура таблицы и начинается древовидная структура.

Рабочий пример: плоские поля преобразуются напрямую, а вложенный JSON сохраняется только как текст ячейки в обратном порядке.

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

Аналогично, инструмент не проверяет необходимые свойства или числовые диапазоны. Он защищает ключи объекта от пустых и повторяющихся заголовков и сообщает о форме строк, но ответственность за семантическую корректность остается на потребителе. Плоский синтаксис может быть допустимым, хотя бизнес-данные неверны.

Знайте, к какой структуре вы движетесь — как очиститель ToolAcre CSV преобразует плоские табличные данные между CSV и JSON.

Знайте, какую структуру ожидает пункт назначения. Для плоского экспорта ToolAcre обеспечивает прозрачный мост: заголовки становятся уникальными ключами, строки становятся объектами, а значения остаются строками. Для вложенных моделей приложений определите сопоставление, а не заставляйте ветки использовать случайные соглашения об именах столбцов.

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