Command Palette

Search for a command to run...

CSV в JSON: Умозапись типа съест ваши почтовые индексы

CSV в JSON: Умозапись типа съест ваши почтовые индексы

T
Toolz Team
|Jul 7, 2026|16 Мин. читать

Часть коллекции Инструменты для данных

CSV в JSON конвертер

Преобразуйте CSV в JSON онлайн. парсы цитируют поля и любой разделитель, делают выводы о числах и логических значениях и выводят массив объектов. 100% клиентская сторона, без регистрации.

Открыть инструмент «CSV в JSON конвертер»

Клиент прислал мне экспорт клиента на 12 000 строк для загрузки в промежуточную базу данных. Я переделал его, импортировал и отправил. Два дня спустя их руководитель OPS спросил, почему несколько сотен клиентов в Нью-Джерси имеют четырехзначные почтовые индексы.

07102 стал 7102.Каждый зип, начинающийся с нуля, по всему файлу, тихо ампутирован. Не по ошибке - по функции. Вывод типа рассматривался 07102, увидел что-то, что соответствовало «числу», и услужливо преобразовало его в единицу. Ведущие нули — это не то, что есть в числах.

я построил CSV в JSON конвертер на Toolz.dev, и он это делает тоже. Я покажу вам, где именно, потому что конвертер, который молча меняет ваши данные, более опасен, чем тот, который просто не выходит из строя.

TL;DR: выше CSV в JSON конвертер Превращает CSV в массив объектов, используя первую строку в качестве ключей, полностью работающую в вашем браузере. ИТ Всегда выводит типы и вы можете 't выключить это в пользовательском интерфейсе - что означает 071027102, 1250.501250.5, пустые ячейки → null, и true/false → Булевы. Большие целые числа после 2⁵³ Stay Strings, что сохраняет ваши идентификаторы Twitter. только запятые в интерфейсе, так что полуколонные CSV от European Excel won't parse.Duplicate заголовки являются жесткой ошибкой, а не молчаливой перезаписью - что one's подлинное улучшение по сравнению с большинством парсеров. проверьте вывод перед импортом, и используйте Форматтер JSON Чтобы глазом его на глаза.


Что на самом деле делает этот конвертер для ваших данных?

Каждое значение в CSV — это текст. 29 это персонажи 2 а 9, йо- JSON имеет реальные типы, поэтому конвертер должен решить: 29 Число 29 или струна "29"? В целом нет правильного ответа, и каждый CSV-парсер догадывается.

Этот догадывается. всегда. Вот полный набор правил, прямо из кода и проверенный запуском:

значение CSV json вывод тип
29 29 номер
07102 7102 число - ноль ушел
1250.50 1250.5 число - цент ушло
true / TRUE true булевский
null / NIL null несущественный
(пустая ячейка) null несущественный
9007199254740993 "9007199254740993" струна
1e3 1000 номер
+5 "+5" струна
.5 ".5" струна
NO "NO" струна
+8801712345678 "+8801712345678" струна
2024-01-05 "2024-01-05" струна

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

Регулярное выражение чисел строг, и это несущая. это соответствует ^-?\d+$ И ничего больше. Вот почему +5 а .5 выжить как строки - нет ведущего плюса, нет голой десятичной точки. Это и #39;s также почему +8801712345678- телефон Бангладеш, и я тестирую на своем - проходит неповрежденным. Раздень это + И вы потеряете его для числового преобразования. Таким образом, строгость регулярного выражения случайно защищает номера телефонов и только номера телефонов, которые хранили код страны плюс.

Большие целые числа обрабатываются правильно, что меня удивило. Все, что находится вне безопасного диапазона целых чисел JavaScript (±2⁵³−1), а не преобразуется и исправляется. Снежинки, идентификаторы Twitter и 19-значные ключи базы данных выживают. Большинство наивных преобразователей звонят parseInt И передать тебе 9007199254740992 Где у вас было ...93, йо- Этот проверяет границу первой.

NO остается струной- который тихо уклоняется от проблемы Норвегии, которая ест файлы YAML. Другой формат, другой парсер, но стоит отметить: код страны NO Это переворот к тому, как синтаксический анализатор конфигов, и вот он безопасен.

Пустые означает null, а не пустую строку. И вот небольшая ошибка документации, которую я нашел, написав это: собственная "как это работает" панель "Пустые значения сохраняются как пустые строки в выводе JSON. они нет. inferType('') обратный null, йо- Текст пользовательского интерфейса неверен, код — это то, что поставляется. Я исправляю копию.


Почему 07102 становится 7102, и что мне с этим делать?

Потому что почтовый индекс — это не номер, а компьютер не может сказать.

07102 Соответствует "цифрам, необязательно отрицательно" идеально. parseInt("07102", 10) есть 7102. Ведущий ноль нес в себе значение - это был данные - и числа не имеют возможности удерживать его То же самое происходит с

  • почтовые индексы, 07102, 01950, что-нибудь в Новой Англии или Нью-Джерси
  • СУКУ, 00451
  • Телефонные номера без плюса, 0171...
  • Банковские/маршрутные коды, Идентификаторы сотрудников, Любой мягкий идентификатор
  • деньги, 1250.501250.5, и 2100.002100

С последним стоит сидеть. 1250.50 а 1250.5 являются одним и тем же номером и другой строкой. Если вы визуализируете валюту ниже по течению, $1250.5 собирается появиться где-то в пользовательском интерфейсе, и кто-то подаст ошибку, которая занимает час, чтобы проследить до конвертации CSV тремя неделями ранее. (Настоящий урок заключается в том, чтобы хранить деньги в виде целых центов или десятичной строки, а не в виде плавающей запятой, но это ' сражается за другую статью.)

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

Пока не отправится, ваши варианты:

  1. Посмотрите на выход. Серьезно - вот почему инструмент показывает JSON в панели вместо того, чтобы просто загрузить его. сканируйте столбцы вашего ID. Это занимает десять секунд и это's как я должен был поймать почтовые индексы.
  2. цитата из цитат. Цитирование в CSV won't help - парсер стриптизует цитаты и к тому же делает выводы, так что "07102" все равно становится 7102, йо- Вместо этого сделайте значение нечислового в источнике: экспортируйте как ZIP-07102, или добавьте столбец префикса в таблицу.
  3. пост-процесс. Конвертируйте, затем исправьте известные вам столбцы: data.forEach(r => r.zip = String(r.zip).padStart(5, '0')), йо- Некрасиво, но честно и проверяемо.
  4. Используйте реальный синтаксический анализатор для реальных конвейеров. для всего запланированного или автоматического, csv-parse или папа разбор в узле с cast: false Сделаю это правильно. Инструмент браузера предназначен для одноразового.

Что правильно получает парсер?

Я & #39; были жесткими в этом, так что вот и #39;s другая половина - и кое-что из этого действительно лучше, чем то, что вы & #39; найдет в другом месте.

Дубликаты заголовков — сложная ошибка. кормить его a,b,a И отказывается: Duplicate headers found: a. Большинство парсеров молча позволяют последнему столбцу выиграть, поэтому столбец данных исчезает без слова. Громко здесь не удался правильный вызов - в объекте JSON не может быть двух ключей с одинаковым именем, и притворство, что в противном случае потеряет данные.

Цитируемые поля обрабатываются правильно, пер RFC 4180. Внутренние кавычки запятых остаются на месте; "" становится буквальным ", йо- Образцы данных поставляются с "Mike, Jr." конкретно, чтобы доказать это.

Новые строки внутри цитируемых полей работают. Здесь обычно умирает ручное расщепление CSV - кто-то расщепляется \n и многострочное поле адреса детонирует весь файл. Разветвитель строк отслеживает цитирование состояния символа по символу, поэтому "line1\nline2" остается в одном поле.

Пустые строки пропущены, поэтому очередные строки и пустые строки Excel в конце не создают фантомных объектов.

Рваные ряды не падают. Слишком мало полей и недостающие клавиши возвращаются null; слишком много, и дополнительные материалы, превышающие количество заголовков, отбрасываются молча. (Последняя часть I'd вызывает спорный, а не правильный - предупреждение было бы лучше, чем тихий сброс.)

Одно RFC-отклонение, чтобы узнать о: Значения обрезаются, в том числе внутри котировок. RFC 4180 §2.4 говорит, что пространства являются частью поля и не должны игнорироваться, поэтому " John " должен быть " John ", йо- Этот инструмент дает вам "John". Это's сознательное удобство - 99% времени отставание пробелов в CSV - это несчастный случай, который вы хотите, чтобы исчезнуть - но если вы' это данные об обходе, когда заполнение важно, it's потерянный шаг, и спецификация не на моей стороне.


Почему мой CSV-разработчик не будет?

Потому что интерфейс только запятые, и это ловит каждый европейский экспорт.

excel в локали, которая использует запятую, так как десятичный разделитель записывает CSV с точка с запятой как разделитель поля. Вполне действителен, крайне распространен, и этот инструмент не будет его анализировать. паста a;b и вы получаете один ключ буквально названный a;b со значением "1;2". Это ошибка 't - она просто создает один бесполезный столбец, что хуже, чем ошибка.

Функция синтаксического анализа принимает delimiter опция. Пользовательский интерфейс никогда не раскрывает его. Тот же класс GAP, что и переключатель вывода.

Обходные пути:

  • находка и замена ;, в текстовом редакторе сначала - безопасно только Если ни одно поле не содержит запятую внутри кавычек.
  • относительно -Экспорт из Excel с "CSV UTF-8 (запятая с ограничением)".
  • использовать CSV-просмотр вместо этого - он выполняет обнаружение разделителей, оценивая согласованность подсчета столбцов по разделителям кандидатов, поэтому он будет читать ваш файл с точкой с запятой. Он выиграл 't конвертируется в JSON, но it' покажет вам, что у вас есть.

Та же проблема есть. Так же и с разграничением трубы.


Как преобразовать CSV в JSON на Toolz.dev?

Шаг 1: Откройте конвертер

ПЕРЕЙТИ К CSV в JSON конвертер, йо- Образцы данных загружаются и уже преобразуются, поэтому вы можете сразу увидеть форму.

Шаг 2: Вставьте CSV

Вставьте в левую панель. там Нет загрузки файла- it's текстовая область, так что откройте свою .csv в текстовом редакторе и скопируйте его через. За несколько тысяч строк это нормально. Для экспорта на 200 МБ используйте реальный синтаксический анализатор.

Ваша первая строка должна быть заголовком, и вам нужна хотя бы одна строка данных. Одна строка возвращается CSV must have at least a header row and one data row, йо-

Шаг 3: конвертировать

бить конвертировать в json. Вы получаете массив объектов, по одному в строке, ключи из вашего заголовка, с отступом в два пробела. счетчик строк отображается над выводом - сверьте его с тем, что вы ожидали, поскольку it's - самый дешевый тест на вменяемость.

Шаг 4: Прочтите вывод, прежде чем доверять ему

Шаг все пропускают, и я пропустил один раз. Посмотрите на свои колонки ID. Посмотрите на свои колонки денег. Если почтовый индекс отображается в JSON не погашенным, теперь это число.

Шаг 5: Скопируйте или скачайте

писать Для буфера обмена, Скачать JSON для data.json пилка


Когда мне не следует использовать конвертер браузера?

Честно говорить о границе:

положение обычай
Одноразовое, несколько тысяч строк CSV в JSON
Конфиденциальные данные, которые вы не можете загрузить Это - он никогда не покидает ваш браузер
что-либо запланированное или автоматическое csv-parse / Папа в узле
Точка с запятой или вкладка CSV-просмотр, или исправить разделитель
Почтовые индексы, SKU, мягкие идентификаторы что-либо с cast: false
Вложенный вывод из пунктирных заголовков Сценарий - при этом получаются только плоские объекты
100к+ строк Потоковое синтаксическое анализатор; браузер держит все это в памяти
Идти в другую сторону json в CSV

Этот «вложенный вывод» стоит прямо сказать, поскольку более старые версии этого руководства утверждали иначе: заголовки, такие как user.name а address.city вести себя не стать вложенными объектами. Вы получаете плоский объект с ключом, буквально названным "user.name". There's нет расширения точечных обозначений, нет преобразования заголовка, нет преобразования camelCase. Плоские объекты, ключи точно такие, как напечатано в строке заголовка - пробелы, хэши и все такое. Заголовок Order # дает вам ключ от "Order #", который является юридической JSON и неудобным javascript (row["Order #"]).

Причина, по которой можно обратиться к этому инструменту, та же причина, что и к остальному сайту: ваши данные не 't идут куда угодно. если вы 'переконвертируете экспорт клиента с настоящими именами и электронными письмами в нем, это 's не мелочь - вставить его в конвертер на стороне сервера означает передать третьей стороне файл персональных данных, который является разговором с вашим DPO вы 'd скорее не иметь. Здесь синтаксический анализ выполняется на вашей вкладке. Выключите свой Wi-Fi, и он все равно работает.


Часто задаваемые вопросы

Почему мой почтовый индекс потерял ведущий ноль?

Потому что вывод типа преобразован в число, а числа не могут хранить ведущие нули. 07102 соответствует шаблону "только цифры", так что он становится 7102. Это влияет на почтовые индексы, мягкие SKU, идентификаторы сотрудников и любой идентификатор, который оказывается цифрами. Цитируя это в CSV won't help - кавычки удаляются перед запуском вывода. проверьте столбцы идентификатора на выходе или добавьте значения в исходный код, чтобы сделать их нечисловыми.

Могу ли я отключить автоматическое преобразование типов?

Не в интерфейсе. Основная функция поддерживает inferTypes вариант, но пользовательский интерфейс не выставляет его, поэтому вывод всегда включен. Если вам нужны необработанные строки, используйте парсер библиотеки, например Papa Parse или csv-parse При отключении приведения или исправлении затронутых столбцов после преобразования.

Поддерживает ли он файлы с запятой или вкладками с разделителями Tab?

Нет - интерфейс только запятый. файл с точкой с запятой анализируется в один бессмысленный столбец, а не ошибается, поэтому следите за этим. Сначала замените точки с запятой запятыми (безопасно только в том случае, если ни одно поле с кавычками не содержит запятую), реэкспортируйте из Excel как разделенные запятыми или используйте средство просмотра CSV, которое автоматически обнаруживает разделители.

Что происходит с пустыми ячейками?

они становятся null, а не пустые строки. заметьте, что инструмент's владеет & quot;How it works& quot; панель в настоящее время говорит обратное - текст панели неправильный и код правильный. ячейки, содержащие буквальный текст null или nil также стать null, йо-

Могу ли я преобразовать CSV без строки заголовка?

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

Обрабатывает ли он запятые и разрывы строк внутри кавычки в полях?

Да, оба. Парсер отслеживает цитирование состояния символа по символу, поэтому поле, похожее на "Mike, Jr." Сохраняет свою запятую, а поле в кавычках, содержащее новую строку, остается одним значением вместо разделения строки. избежали двойных кавычек ("") стать единственной буквальной цитатой, согласно RFC 4180.

Что происходит с именами дублирующихся столбцов?

Он отказывается конвертировать и сообщает, какой заголовок дублируется. That's преднамеренно - объект JSON может't иметь две одинаковые клавиши, поэтому альтернативой является молчаливое опускание столбца. Многие парсеры делают именно это; переименовать столбцы и преобразовать снова.

Есть ли предел строки?

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

Мои данные куда-нибудь загружены?

Нет. Анализ происходит в вашем браузере, и ваш CSV никогда не передается, что делает его безопасным для экспорта клиентов и других данных, которые вы могли бы 't законно вставить в инструмент на стороне сервера. Проверьте это простым способом - откройте DevTools, посмотрите вкладку "Сеть" во время преобразования или просто отключите Wi-Fi и убедитесь, что он все еще работает.


короткая версия

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

Итак: перевести, тогда Читать вывод, йо- Проверьте столбцы, которые являются идентификаторами, притворяющимися числами. Если они вышли не по кавычкам, вы что-то потеряли. Эта привычка стоит десять секунд и сэкономила бы мне смущающее электронное письмо.

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

Идти в другом направлении: json в CSV, йо- Для проверки сначала беспорядочного CSV: CSV-просмотр, йо- Для проверки вывода: Форматтер JSON, йо- И если ваши данные направляются для файла конфигурации, json в yaml, йо- Более широкая экскурсия в Руководство по инструментам JSON и тот Руководство по инструментам кодирования, йо-

Frequently Asked Questions

Because type inference converted it to a number, and numbers can't store leading zeros. 07102 matches the "digits only" pattern, so it becomes 7102. This affects zip codes, padded SKUs, employee IDs, and any identifier that happens to be all digits. Quoting it in the CSV won't help — quotes are stripped before inference runs. Check your ID columns in the output, or prefix the values at the source to make them non-numeric.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!