Вернувшись в мои дни WP Adminify, появился билет поддержки, который гласил просто: & quot;Настройки импортированы сломаны. Ничего не работает. & quot; Пользователь вручную отредактировал экспортированный файл настроек - одну конечную запятую в строке 217 9000-строчного блока JSON - и мой импортер ответил world's наименее полезная ошибка: Импорт не удался.
Я написал это сообщение об ошибке. Это на мне.
Нам понадобилось 40 минут 40 минут перевернутых, чтобы найти одну запятую, которую приличный форматтер отметил за полсекунды. Этот билет изменил мое представление об инструментах JSON, и спустя годы он сформировал то, как я построил Форматтер JSON На Toolz.dev: Местоположение ошибки не очень приятно. Это весь продукт.
В этом руководстве рассказывается о том, как форматировать JSON онлайн, почему форматирование не удается, а также о ловушках синтаксиса, которые съедают всех, и в конечном итоге #39;s во второй половине дня, включая мою.
TL;DR: Чтобы отформатировать JSON онлайн, вставьте его в инструмент на стороне клиента, например Toolz.dev форматтер JSON- он довольно мгновенно печатает, помечает синтаксические ошибки номерами строк и никогда не загружает ваши данные. Если форматирование не удается, у вас почти наверняка есть конечная запятая, отдельные кавычки или нецитируемый ключ. Используйте отступ в 2 пространства, если ваша команда не скажет иное.
Что на самом деле делает «форматирование Json»?
Форматирование - красивая печать, если вы ' чувствуете себя причудливым - добавляет отступы и разрывы строк, чтобы структура стала видимой. Данные не изменяются 't изменяются на один бит. It's преобразование представления, не более того.
ЭТО:
{"employees":[{"firstName":"John","lastName":"Doe","department":"Engineering","skills":["JavaScript","Python","Docker"]},{"firstName":"Jane","lastName":"Smith","department":"Design","skills":["Figma","CSS","Illustration"]}],"company":"Acme Corp","founded":2015}
становится так:
{
"employees": [
{
"firstName": "John",
"lastName": "Doe",
"department": "Engineering",
"skills": ["JavaScript", "Python", "Docker"]
},
{
"firstName": "Jane",
"lastName": "Smith",
"department": "Design",
"skills": ["Figma", "CSS", "Illustration"]
}
],
"company": "Acme Corp",
"founded": 2015
}
одинаковые данные. Но только один из них позволяет сразу заметить, что Джейн в дизайне.
Есть бонус, о котором большинство людей не думают: форматирование также является скрытой проверкой. Форматтер должен проанализировать ваш документ, чтобы переформатировать его, поэтому, если JSON сломался, хороший форматтер подскажет вам где- это настоящая причина использовать его вместо щурения.

Как вы форматируете JSON онлайн на практике?
Весь рабочий процесс составляет около пятнадцати секунд:
- Скопируйте JSON откуда бы он ни жил - вкладка DevTools Network (щелкните правой кнопкой мыши запрос → Копировать ответ),
curlВывод, файл журнала, сообщение о провисе. - откройте Форматтер JSON, йо- Нет регистрации, нет входа. Он загружается, и вы вставляете.
- Прочитайте вывод. Действительный JSON возвращается с отступом и подсвеченным синтаксисом, со складными разделами для больших документов. Недопустимый JSON получает ошибку с номером строки и простым английским описанием.
- скопировать или скачать. Один клик в любом случае.
Это's это. Интересная часть - 't счастливый путь - it's шаг 3, когда что-то идет не так. Итак, позвольте 's пойти не так.

Почему мой JSON не форматируется?
Если форматтер откажется от вашего JSON, документ нарушает грамматику в RFC 8259. По моему опыту - как в результате моей собственной отладки, так и в результате создания инструмента, в который люди вставляют свой сломанный JSON - it's почти всегда одна из пяти вещей.
1. запятые
{
"name": "Alice",
"age": 30,
}
SyntaxError: Unexpected token } in JSON at position 34
JavaScript позволяет это. JSON никогда не имел. Удалите запятую после последнего элемента в каждом объекте и массиве:
{
"name": "Alice",
"age": 30
}
Это моя запятая с поддержкой билета. Уважайте это.
2. Одиночные кавычки
{ 'name': 'Alice' }
Классический питон скажет. str(my_dict) производит однокаток псевдо-JSON; json.dumps(my_dict) производит реальную вещь. если вы ' видите одиночные цитаты в чем-то, претендующем на то, чтобы быть JSON, кто-то напечатал диктант вместо того, чтобы сериализовать его - I & #39; сделали это, вы & #39; сделали это, мы & #39; все сделаем это снова.
{ "name": "Alice" }
3. Неокрашенные обратные слэши
{ "path": "C:\new\test" }
Выглядит безобидно. но \n это новая строка и \t это вкладка, поэтому она анализируется на путь с фактическими разрывами строк или полностью завершается неудачей в таких последовательностях, как \x, йо- Пути Windows являются жертвой номер один:
{ "path": "C:\\new\\test" }
4. Несоответствующие скобки
{
"users": [
{"name": "Alice"},
{"name": "Bob"}
}
пропавший ]. Здесь тривиально, жестоко в конфигурации, вложенной глубиной в шесть уровней. Это категория ошибок, которую люди действительно плохо находят, и парсеры обнаруживают мгновенно - передают ее на аутсорсинг.
5. Значения JavaScript, которые не являются JSON
{ "value": undefined, "count": NaN }
undefined, NaN, и Infinity Являются JavaScript, а не JSON. JSON.stringify тихо конвертирует NaN на null и капли undefined свойства полностью - что означает, что ошибка часто 't в JSON вы' смотрите, it's выше по течению в том, что его произвело. Используйте null явно и проверьте свой сериализатор.
выше формататель Поймал все пять с прикрепленным номером строки. Это последнее предложение является всей причиной, по которой существует эта категория инструментов.
Стоит ли использовать 2 пробела, 4 пробела или вкладки?
Вечные дебаты, JSON-издание. Вот честное сравнение:
| 2 пробела | 4 пробела | чечетка | |
|---|---|---|---|
| экосистема | JavaScript/TypeScript, npm, | Python, Java, .NET | GO, какой-нибудь устаревший код |
| глубокое гнездышко | Остается на экране | Бегает с правого края | Зависит от ширины вкладки |
| Различная читаемость | благоприятный | благоприятный | Хорошо, пока не смешается с пробелами |
JSON.stringify по умолчанию arg |
2 (по условности) |
4 |
"\t" |
| мой вердикт | По умолчанию для JSON | Хорошо, если ваша команда Python-first | Не, для JSON конкретно |
Моя позиция, и я умру на этом маленьком холме: 2 пробела для JSON, независимо от того, что использует ваш другой код. JSON гнездится глубже, чем типичный исходный код (реакции API глубиной четыре и пять уровней нормальны), а отступы в 4 пространства превращают их в упражнения с горизонтальной прокруткой. Даже в командах с большим количеством Python я установил JSON на 2 места, и никто никогда не жаловался дважды.
Что бы вы ни выбрали, закодируйте это, чтобы дискуссии закончились:
# .editorconfig
[*.json]
indent_style = space
indent_size = 2
insert_final_newline = true
выше формататель Поддерживает обе ширины, поэтому соответствие соглашению вашего проекта — это раскрывающийся список, а не обсуждение.
А как насчет форматирования из командной строки?
Иногда терминал ближе, чем вкладка браузера. Мое фактическое использование:
# jq — the standard. Install it, learn 10% of it, profit.
curl -s https://api.example.com/users | jq .
# Python — already on basically every machine
curl -s https://api.example.com/users | python -m json.tool
# Node, if you enjoy typing
node -e "console.log(JSON.stringify(JSON.parse(require('fs').readFileSync(0,'utf8')),null,2))" < data.json
Где каждый выигрывает, честно:
- честный для всего, что написано, повторено или передано по конвейеру, а также для извлечения полей (
jq '.data.users[].email') вместо того, чтобы читать целые документы. - инструмент браузера Для разовых, для всего, что вы хотите исследовать со складными разделами, и для показа товарища по команде - вы можете't screen-share выражение jq менеджеру проекта.
- VS Кодекс (
Shift+Alt+F) для файлов JSON, которые живут в репозитории и все равно открыты.
Я использую все три в день. Любой, кто говорит вам, что один заменяет других, что-то продает.
Одна привычка, которую стоит украсть: curl -s ... > response.json в первую очередь, затем отформатируйте файл. Когда ответом оказывается страница с ошибкой HTML, носить Content-Type: application/json костюм - происходит больше, чем хотелось бы любому из нас - вам ' захочется оригинальные байты, а не ваш браузер и #39;s интерпретация их.
Три метода форматирования, которые большинство людей пропускают
Сортируйте ключи в алфавитном порядке. Различные сериализаторы излучают ключи в разных порядках, что делает дифференциалами «одно и то же» данные перезаписи. Сортировка ключей перед дифференциацией превращает 300-строчный дифференциал в 2 строки, которые действительно изменились. Это прекрасно сочетается с Инструмент текстового дифференциала при сравнении постановочной и производственной полезной нагрузки - трюк, который лично спас меня как минимум во время двух инцидентов.
Держите короткие массивы внутри. "colors": ["red", "green", "blue"] На одной строке читается лучше, чем пять строк церемонии. Хорошие формататоры делают это автоматически для массивов примитивов; это разница между форматированным JSON, вы можете просмотреть и отформатировать JSON, который технически хорош, но 4000 строк длиной.
Отформатируйте фрагмент, а не файл. Для документа объемом 15 МБ, когда вас волнует только один объект: скопируйте этот вложенный объект, отформатируйте его в одиночку, готово. Форматирование всего файла, чтобы вы могли прочитать 40 его строк, - это напрасная трата усилий - хотя, если вам все это нужно, клиентский инструмент обрабатывает его без строки выполнения загрузки, потому что там 's не загружается.
и знать, когда не Для форматирования: минимизированный JSON в производственных пакетах и ответах API должен оставаться минимальным. Форматирование для глаз, а не для проводов. Если вам нужно противоположное направление, то же самое стрелка Минимизируется одним щелчком мыши.
Часто задаваемые вопросы
Как бесплатно отформатировать json онлайн?
Вставьте свой JSON в Toolz.dev форматтер JSON- он мгновенно форматируется с подсветкой синтаксиса и проверкой ошибок, бесплатно, без регистрации. Обработка происходит в вашем браузере, поэтому ничего из вставленного вами не загружается куда угодно. Эта последняя часть имеет большее значение, чем & quot;free" часть, если полезная нагрузка содержит токены или пользовательские данные.
Почему мой JSON неправильно форматируется?
В документе есть синтаксическая ошибка, и главными подозреваемыми являются конечные запятые, одиночные кавычки, нецитируемые ключи, неэкранированные обратные косые черты и несовпадающие скобки. Форматировщик, который проверяет, укажет на точную линию. Если ошибка не имеет смысла, проверьте, действительно ли у вас есть JSON вообще - API любят возвращать страницы ошибок HTML с типом контента JSON.
В чем разница между форматированием и проверкой JSON?
Форматирование перезаписывает пробелы для читаемости; проверка проверяет документ на соответствие грамматике RFC 8259. На практике они ' та же операция - форматировщик должен проанализировать (проверять), прежде чем он сможет переформатироваться. Это 's почему & quot;it won't format" и & quot;it's valid" являются тем же диагнозом.
Должен ли я использовать 2 или 4 пробела для отступа в JSON?
Используйте 2 пробела, если ваш проект уже не стандартизирован на 4. JSON гнездится глубже, чем большинство исходного кода, а 2-пробелоотступы сохраняют читаемые в реальных API-ответах ответы API без горизонтальной прокрутки. Затем зафиксируйте выбор в .editorconfig Так что он больше никогда не появится в обзоре кода.
Могу ли я отформатировать json в VS-коде без расширения?
Да - Shift+Alt+F (или Shift+Option+F На Mac) форматирует любой файл JSON со встроенным форматтером, а "формат на сохранении" делает его автоматическим. Обратите внимание, что собственная VS код settings.json является ли JSONC, который позволяет комментировать - don't позволяет этому убедить вас, что обычный JSON делает это.
Безопасно ли вставлять ответы API в онлайн-форматтеры JSON?
Только в клиентские. множество сайтов форматировщиков. POST ваш ввод на сервер, что означает, что ваш ответ API - токены, электронные письма и все такое - теперь существует в чьих-то других журналах. & # 39;s. Журналы Toolz.dev Форматтер Полностью работает в вашем браузере; проверьте его самостоятельно, наблюдая за вкладкой «Сеть» во время вставки.
Как отформатировать огромный файл JSON (10 МБ+)?
Инструменты браузера на стороне клиента обрабатывают файлы в этом диапазоне хорошо, так как там 's нет шага загрузки - вставка медленная часть. за 50 МБ или около того, переключитесь на инструменты потоковой передачи: jq В командной строке или извлечь только тот раздел, который вам нужен, и отформатируйте его. Никогда не вставляйте огромные файлы в серверные инструменты; вы ждете, чтобы загрузить без пользы.
Как минимизировать JSON вместо форматирования?
Тот же инструмент, противоположная кнопка - the Форматтер JSON Имеет режим минимизации одним щелчком мыши, который удаляет все пробелы. Уменьшите для производственных полезных нагрузок, локальных хранилищ и логарифмических конвейеров; формат для людей. Данные в любом случае идентичны.
Изменяет ли форматирование JSON данные?
Нет - форматирование только перезаписывает пробелы, поэтому ключи, значения и структура остаются идентичными по смыслу. отформатированный документ и его минифицированная версия анализируются на один и тот же объект. если ваши данные действительно меняются, вы редактировали что-то вручную, а не просто форматируя.
Что такое JSON-качественный?
It's другое имя для форматировщика JSON - инструмент, который принимает минифицированный или беспорядочный JSON и добавляет отступы и разрывы строк, чтобы человек мог его прочитать. "Украсить," "pretty-print," и "format" все описывают одну и ту же операцию.The Форматтер JSON Делает это в одной пасте.
Пятнадцать второй привычки
Форматирование JSON - это небольшой навык с негабаритными доходами - большинство & quot; API сломан & quot; моменты действительно & quot; полезная нагрузка нечитаемая & quot; моменты, и те растворяются, как только структура становится видимой. Уменьшите цикл чтения в формате пасты до пятнадцати секунд, и исчезнет целая категория трений отладки.
выше Форматтер JSON на Toolz.dev Является ли версия этого инструмента, которую я хотел во время этого билета в службу поддержки: мгновенные, точные об ошибках и неспособные утечки ваших данных, потому что они никогда не получают их.
Как только ваш JSON станет чистым, следующим шагом обычно будет его перемещение куда-нибудь - в электронную таблицу с json в CSV конвертер, обратно из одного с CSV в JSON конвертер, или в конвейер конфигов через Валидатор YAML, йо- Начните с json в CSV-руководство или вернуться к Полное руководство по инструментам JSON для полной карты.
Связанные статьи:



