Вследствие синтаксической простоты и гибкости, JSON (JavaScript Object Notation, Объектная Нотация JavaScript) стал стандартом де-факто, используемым для обмена данными во многих веб-приложениях. В связи с тем, что JSON широко используется для представления структурированных данных с высокой степенью гибкости, возникает необходимость иметь возможность «валидировать» JSON-представления.

Таким образом появилась так называемая схема JSON (в настоящий момент 4-я версия черновика IETF), которая определяет структуру данных JSON в декларативном формате, так же, как схема базы данных определяет логическую структуру и взаимоотношение записей базы данных. Сама схема JSON записана в JSON формате. Схема JSON может быть довольно полезна не только для генерации правильно форматированных данных JSON, но также для проверки корректности структуры данных JSON.



Это руководство затронет два аспекта валидации JSON с соблюдением схемы JSON. Во-первых, вы можете валидировать данные JSON по схеме JSON, т.е., проверять, чтобы данные JSON соответствовали спецификации из схемы JSON. Другой аспект валидации — это валидация схемы, когда вы проверяете, чтобы сама схема JSON была правильно оформлена в соответствии с Интернет-черновиком схемы JSON. В обоих случаях я покажу вам, как произвести необходимую валидацию из командной строки Linux.

Валидация данных JSON по схеме JSON из командной строки


Есть много библиотек и утилит с открытым исходным кодом, которые погут валидировать данные JSON. Одна из них — это библиотека JSON-Spec на python, которая идет с утилитой командной строки json.

Чтобы установить JSON-Spec на Linux, для начала установите pip, а затем установите ее, как показано далее.

$ sudo pip install json-spec

Затем вы можете валидировать данные JSON по схеме JSON в следующей форме:

$ json validate --schema-file=schema.json --document-file=data.json

$ json validate --schema-file=schema.json < data.json

$ json validate --schema-file=schema.json --document-json='{"foo": ["bar", "baz"]}'

Давайте используем следующие примеры данных JSON и схемы JSON и посмотрим, как данные JSON могут быть валидированы по схеме JSON.

data.json:

{
    "id" : 1,
    "name": "Dan Nanni",
    "age": 25,
    "skills": ["написание скриптов", "работа в дата-центре"]
}

schema.json:

{
    "title": "Работник",
    "description": "Информация о работнике",
    "type": "object",
    "properties": {
        "id": {
            "description": "Уникальный идентификатор работника",
            "type": "integer"
        },
        "name": {
            "description": "Имя работника",
            "type": "string"
        },
        "age": {
            "type": "number",
            "minimum": 0,
            "exclusiveMinimum": true
        },
        "skills": {
            "type": "array",
            "items": {
                "type": "string"
            },
            "minItems": 1,
            "uniqueItems": true
        }
    },
    "required": ["id", "name", "age"]
}

Взяв приведенные выше примеры, валидируйте data.json по schema.json, как показано далее.

$ json validate --schema-file=schema.json --document-file=data.json

Если данные JSON соответствуют схеме, команда ничего не выдаст. Если нет, команда выдаст исключение:

Exception: document does not validate with schema.

  #/
    - reason Missing property

Исключение: документ не соответствует схеме.

  #/
    - причина Отсутствующее свойство

Валидация схемы JSON из командной строки


Еще один аспект валидации JSON — это проверять соответствует ли сама схема JSON правильному синтаксису. Для валидации схемы пригодится инструмент на Java под названием json-schema-validator. Этот инструмент поддерживает валидацию синтаксиса для самой последней 4-й версии черновика схемы JSON. Он может работать независимо из командной строки или может быть интегрирован в процесс сборки Maven как плагин.

Для запуска его из командной строки вы можете скачать исполняемую версию JAR из Bintray. Убедитесь, что скачиваете архив json-schema-validator-X.X.X-lib.jar, в который включены все зависимости.

После скачивания, проверьте валидность схемы JSON из командной строки, как показано далее.

$ java -jar json-schema-validator-2.2.6-lib.jar --syntax schema.json

--- BEGIN /home/dan/schema.json---
validation: SUCCESS
--- END /home/dan/schema.json---

--- НАЧАЛО /home/dan/schema.json---
валидация: УСПЕШНО
--- КОНЕЦ /home/dan/schema.json---
Поделиться с друзьями
-->

Комментарии (4)


  1. amarao
    21.07.2016 22:00
    +2

    Мило. В комбинации с jq получается почти полный набор инструментария для структурированного шелла.


    1. xandr0s
      22.07.2016 12:14

      Тоже первым делом пришло в голову попробовать его в комбинации с jq


  1. iqiaqqivik
    22.07.2016 12:06
    -1

    Если называть вещи своими именами, это валидация с помощью питона, а никак не валидация из командной строки.


  1. kay
    22.07.2016 16:47

    sudo pip install это почти тоже самое что и curl http://example.com/sh | sudo sh -s
    Я для валидации (не по схеме) предпочитаю уже доступный в системе python -mjson.tool