Русский

Инструменты разработчика · Конвертеры синтаксиса

От CSV до JSON и от JSON до CSV: заголовки, строковые значения и выравнивание.

· Как это работает

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

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

CSV является плоским, нетипизированным и неоднозначным в отношении собственного разделителя, тогда как JSON является вложенным и типизированным. В этом посте показано, как конвертер сопоставляет строки с объектами и обратно и где информация теряется в каждом направлении.

Каждое число возвращалось в кавычки — экспорт CSV конвертировался в JSON, где 42 стал «42», а код ZIP на этот раз сохранил ведущий ноль.

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

Это одностороннее решение видно как в интерфейсе, так и в ошибках. CSV отображается как цель, а не как источник, и попытка обратного изменения возвращает `UNSUPPORTED_CONVERSION` с советом использовать инструмент, который запрашивает диалект и типы. Заголовок, предполагающий оба направления, исказил бы продукт, даже если бы общая тема была распространена где-то еще.

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

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

Каждая выбранная запись выравнивается перед сбором столбцов. Записи могут быть даже скалярами внутри массива; они используют столбец `value`. Использование голого скаляра в корне документа отвергается, поскольку одна строка или число не определяет таблицу с записями и полями.

Выбор записей из JSON: массивы, отдельные объекты и одноключевые оболочки массивов.

Типы JSON сохраняются только в виде текста ячейки. Логические значения становятся `true` и `false`, числа используют десятичное представление, а значение null становится пустой ячейкой. CSV не может отличить это значение NULL от пустой строки, поэтому средство записи считает значения NULL и предупреждает о неоднозначности, а не вызывает эквивалент результата.

Широкие целые числа уже подвергаются синтаксическому анализу JSON до этого этапа, поэтому небезопасный числовой литерал может потерять точность. Заключение идентификатора в кавычки сохраняет его текст. Строки, подобные формуле, по умолчанию получают дополнительный апостроф, если они начинаются с `=`, `+`, `-`, `@`, табуляции или возврата каретки; фактическое число `-5` остается числом и не имеет префикса.

Почему вывод CSV не может сохранить типы JSON

Столбцы представляют собой объединение плоских ключей в порядке их появления. Если в одной строке есть `a`, а в другой — `b`, выходные данные содержат оба столбца и дополняют каждое отсутствующее поле пустой ячейкой. Предупреждение сообщает о неровных строках, а не о смещении значений под неправильными заголовками.

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

Сглаживание вложенных данных — точечные пути, такие как address.city, массивы в виде индексированных столбцов или объединенных строк, а также точка, в которой CSV просто не может удерживать форму.

Ключи вложенных объектов соединяются точкой: `address.city`. Массивы используют одни и те же разделители и числовые индексы: `tags.0`, `tags.1`. Пустые объекты и массивы сохраняют одну пустую ячейку на своем пути, а не исчезают. В результате получается прямоугольник, признавая при этом, что дерево было спроецировано на имена.

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

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

Используйте `[ {"id":"0042","address":{"city":"Oslo"},"tags":["new","west"],"note":"=1+1"}, {"id":"0043","address":{"city":"Lima"},"tags":[],"note":null} ]`. Заголовки включают id, address.city, tags.0, tags.1 и примечание. Вторая строка получает пробелы для отсутствующих индексов тегов, а ее нулевое примечание неотличимо от пустого текста.

Перед первым примечанием стоит апостроф, поэтому электронная таблица воспринимает его как текст. Записи заканчиваются на CRLF, поля, содержащие разделитель, кавычку или конец строки, заключаются в двойные кавычки, а встроенные кавычки дублируются. Выбор точки с запятой или табуляции изменяет разделитель; для потребителей, которым это необходимо, можно добавить дополнительный UTF-8 BOM.

Рабочий пример: вложенный массив клиентов, один раз сведенный в CSV.

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

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

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

JSON — типизированное дерево; CSV — текстовая таблица. ToolAcre выбирает строки, выравнивает пути, объединяет столбцы, заключает поля в кавычки и нейтрализует опасный текст, но он не может сохранить значение null или пустой или восстановить вложенность позже. Эти потери являются скорее структурным, чем форматирующим шумом.

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