Схема JSON для безымянного массива? - PullRequest
1 голос
/ 06 ноября 2019

Мне нужно создать схему JSON для данных, которые поступают в виде массива непосредственно в корневой объект без имени. MWE для JSON такого типа:

{
  [ 
    {
      "veggieName": "potato",
      "veggieLike": true
    },
    {
      "veggieName": "broccoli",
      "veggieLike": false
    }
  ]
}

Я видел примеры схем, которые проверяют такой массив, который не вложен в объект. Я также видел примеры, которые работают, когда массив именуется, например

{
  vegetables : [ 
    {
      "veggieName": "potato",
      "veggieLike": true
    },
    {
      "veggieName": "broccoli",
      "veggieLike": false
    }
  ]
}

. Этот второй пример может быть проверен с помощью схемы

{
  "$id": "https://example.com/arrays.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A representation of a person, company, organization, or place",
  "type": "object",
  "properties": {
    "vegetables": {
      "type": "array",
      "items": { "$ref": "#/definitions/veggie" }
    }
  },
  "definitions": {
    "veggie": {
      "type": "object",
      "required": [ "veggieName", "veggieLike" ],
      "properties": {
        "veggieName": {
          "type": "string",
          "description": "The name of the vegetable."
        },
        "veggieLike": {
          "type": "boolean",
          "description": "Do I like this vegetable?"
        }
      }
    }
  }
}

Но проблема в том, как толькоимя "овощи" удалено, я не смог найти способ определения допустимой схемы. Как правильно представить мою структуру данных в схеме?

(MWE получены из http://json -schema.org / learn / miscellaneous-examples.html ).

1 Ответ

1 голос
/ 06 ноября 2019

Схема, которую вы ищете, выглядит следующим образом:

{
   "$id":"https://example.com/arrays.schema.json",
   "$schema":"http://json-schema.org/draft-07/schema#",
   "description":"A representation of a person, company, organization, or place",
   "type":"array",
   "items":{
      "type":"object",
      "required":[
         "veggieName",
         "veggieLike"
      ],
      "properties":{
         "veggieName":{
            "type":"string",
            "description":"The name of the vegetable."
         },
         "veggieLike":{
            "type":"boolean",
            "description":"Do I like this vegetable?"
         }
      }
   }
}

Вам также необходимо изменить ваш базовый экземпляр массива, ваш исходный ("неназванный" массив) был недопустимым JSON:

[
   {
      "veggieName":"potato",
      "veggieLike":true
   },
   {
      "veggieName":"broccoli",
      "veggieLike":false
   }
]

В отличие от XML, где для каждого документа разрешен только один корневой узел, в JSON в качестве корневого типа может быть либо тип, либо массив.

...