Данные и таблицы · CSV Очиститель
CSV против JSON: два формата данных и идеи о структуре, стоящей за ними
· Фон
csv JSON форматы данных
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 перед загрузкой. Конвертер наиболее эффективен при использовании в узком диапазоне форматов. Это не стирает их концептуальные различия, и заслуживающий доверия рабочий процесс не должен требовать этого.