vasilenko.info

Форматтер и валидатор JSON

/tool/json-formatter/ работает дерево, починка, схема

Вставьте ответ API, откройте файл или дайте адрес — форматтер развернёт документ с отступами, а если разбор не пройдёт, покажет строку и колонку, где сломалось, и предложит починить. Дальше по тому же документу работают дерево с путями, выборка по JSONPath, проверка по схеме, сравнение с эталоном и выгрузка в CSV, YAML или XML.

промоДвадцать лет заметок про сайтыКак это делали в 2008-м и что из этого работает сейчас.Открыть

Разбор и форматирование

Что на входе

JSON Lines (он же NDJSON) — выгрузки и логи, где на каждой строке отдельная запись и запятых между ними нет. Такой файл разбирается построчно: номер битой строки виден сразу, остальные записи при этом читаются.

Отступ
Вывод

С номерами строк подсветка синтаксиса остаётся, но рисуется этим инструментом, а не общей раскраской сайта.

Сначала пробуем забрать ответ прямо из браузера. Так получится с теми API, которые разрешают чтение с чужих страниц заголовком Access-Control-Allow-Origin; остальные браузер закроет, и об этом будет сказано прямо. Предел — 5 МБ.

Перетащите файл сюда или в поле ниже

Файл читается на вашем устройстве, никуда не отправляется. Расширения .jsonl и .ndjson сами включают режим JSON Lines.

Ответ API, содержимое файла, кусок лога. Комментарии, висячие запятые и одинарные кавычки стандартом не разрешены — на них форматтер ругается, но кнопка «Починить» умеет их убрать.

Результат

Как показать

Готово

json

    Строк в результате
    Записей
    Ключей всего
    Глубина вложенности
    Знаков на входе
    Знаков в результате

    Разбор идёт на вашем устройстве, в отдельном потоке — вкладка не замирает даже на файле в несколько мегабайт. Наружу уходит один-единственный случай: кнопка «Загрузить» по адресу. Всё остальное — вставленный текст, открытый файл, схема, эталон — с устройства не уходит. Черновик и настройки сохраняются в этом браузере и стираются кнопкой «Сбросить».

    Выборка и проверка по схеме

    Выражение достаёт из документа только нужное, схема — показывает, где данные разошлись с уговором. Работают по тому же документу, что разобран выше.

    Понимает $, точку, ["ключ"], [0], [*], срез [1:3] и две точки — поиск ключа на любой глубине: $..id. Счётчик совпадений обновляется на каждый знак.

    Draft-07 в разумном объёме: type, required, enum, const, minimum и maximum (в том числе строгие), minLength и maxLength, pattern, items, properties, patternProperties, additionalProperties, minItems, maxItems, uniqueItems, anyOf, allOf, oneOf, not, $ref внутри самой схемы.

    Что нашлось

    Выражение не задано

    json

      Проверка по схеме

      Схема не задана

        Сравнение с эталоном

        Обе стороны сначала приводятся к одному виду — ключи по алфавиту, одинаковый отступ, — и только потом сравниваются построчно. Иначе половина «различий» оказалась бы разным порядком ключей.

        Второй документ: вчерашний ответ того же метода, выдача с боевого сервера, ожидаемый образец из тестов. Слева — то, что разобрано в первой панели, справа — то, что здесь.

        Различия построчно

        Эталон не задан

        diff
          промоПосчитайте заодно ROIОкупаемость кампании по расходу и доходу.Открыть

          Как пользоваться

          1. Дайте документ любым из трёх способов: вставьте текст в поле, перетащите файл на пунктирную рамку или на само поле, либо укажите адрес и нажмите «Загрузить». Разбор запускается сразу, кнопку жать не нужно.

          2. Если разбор не прошёл — в замечании будет строка и колонка, а кнопка рядом перенесёт курсор ровно в это место в поле ввода. Указана позиция, где парсер понял, что дальше читать нельзя: сама опечатка обычно на пару символов левее.

          3. Битый JSON из чужого конфига или из лога чините кнопкой «Починить»: она снимает висячие запятые, меняет одинарные кавычки на двойные, закавычивает голые ключи, вырезает комментарии и заменяет NaN, Infinity и undefined на null. Список того, что именно было исправлено, показывается в замечаниях — молча ничего не подменяется.

          4. Вкладка «Дерево» нужна там, где листинг бесполезен: в ответе на три тысячи строк. Узлы сворачиваются, у каждого видно тип и число элементов, а кнопки рядом кладут в буфер путь до узла — в виде $.items[3].id и в виде data["items"][3]["id"].

          5. Вкладки CSV, YAML и XML пересобирают тот же документ в другой формат. CSV получается из массива объектов: столбцы — объединение ключей, вложенное складывается обратно в JSON внутри ячейки. Кнопка «Скачать файлом» отдаёт то, что показано на текущей вкладке.

          6. Выражение JSONPath во второй панели достаёт из документа только нужное: $.items[*].id — все идентификаторы, $..price — все цены на любой глубине. Счётчик показывает, сколько совпало, листинг — что именно.

          7. JSON Schema в той же панели проверяет документ на соответствие уговору. Нарушения выводятся списком с путями: видно не «не сошлось», а «$.items[2].price: ожидалось число, пришла строка».

          8. Сравнение с эталоном в третьей панели показывает, чем два документа отличаются: построчно с пометками и отдельным списком путей. Порядок ключей на результат не влияет — обе стороны сортируются.

          промоСписок задач в браузереБез аккаунта, всё хранится на вашем устройстве.Открыть

          Разбор примера: ответ на 88 знаков

          Исходные данные — те же, что стоят в полях по умолчанию: их можно пересчитать в уме и убедиться, что инструмент не врёт.

          1. Ключей на верхнем уровне четыре — name, count, tags, meta — плюс два внутри meta: open и path. Итого шесть.

          2. Вложенность: сам объект — первый уровень, массив tags и объект meta — второй. Глубже ничего нет, значит глубина 2.

          3. Каждый элемент массива и каждая пара ключ-значение уходят на свою строку. Скобки массива и объекта тоже занимают по строке.

          4. В дереве это три узла верхнего уровня со значениями и два сворачиваемых: tags — массив на 3 элемента, meta — объект на 2 ключа. Путь до третьего тега — $.tags[2], он же data["tags"][2].

          Получается 13 строк: открывающая скобка, name, count, «tags»: [, три тега, закрывающая скобка массива, «meta»: {, open, path и две закрывающие скобки. Ключей 6, глубина 2. Выражение $.tags[*] даст три совпадения, вкладка CSV на таком документе откажется работать — CSV собирается из массива объектов, а здесь корень объект.

          Частые вопросы

          промоВесь каталог инструментовСорок четыре штуки, все считают в браузере.Открыть

          Смежные инструменты

          6

          Генератор паролей

          Делает пароли нужной длины и оценивает, насколько их сложно подобрать.

          Открыть

          URL-кодирование

          Экранирует адреса и параметры и разбирает их обратно.

          Открыть

          Хеши MD5 и SHA

          Считает MD5, SHA-1, SHA-256 и SHA-512 от строки или файла.

          Открыть