Как написать схему JSON для массива объектов?

Моя строка JSON будет отформатирована следующим образом:

{
    "count":3,
    "data":[
        {
            "a":{"ax":1}
        },
        {
            "b":{"bx":2}
        },
        {
            "c":{"cx":4}
        }
    ]
}

Массив dataсодержит множество aи bи c. И никаких других объектов.

Если count==0, dataдолжен быть пустым массивом[].

Я использую https://github.com/hoxworth/json-schemaдля проверки таких объектов JSON в Ruby.

require 'rubygems'
require 'json-schema'

p JSON::Validator.fully_validate('schema.json',"test.json")

schema.jsonвыглядит следующим образом:

{
  "type":"object",
  "$schema": "http://json-schema.org/draft-03/schema",
  "required":true,
  "properties":{
     "count": { "type":"number", "id": "count", "required":true },
     "data": { "type":"array", "id": "data", "required":true,
       "items":[
           { "type":"object", "required":false, "properties":{ "a": { "type":"object", "id": "a", "required":true, "properties":{ "ax": { "type":"number", "id": "ax", "required":true } } } } },
           { "type":"object",  "required":false, "properties":{ "b": { "type":"object", "id": "b", "required":true, "properties":{ "bx": { "type":"number", "id": "bx", "required":true } } } } },
           { "type":"object",  "required":false, "properties":{ "c": { "type":"object", "id": "c", "required":true, "properties":{ "cx": { "type":"number", "id": "cx", "required":true } } } } }
       ]
     }
  }
}

Но это для test.jsonпройдет проверку, в то время как я предполагаю, что она должна провалиться:

{
  "count":3,
  "data":[
      {
          "a":{"ax":1}
      },
      {
          "b":{"bx":2}
      },
      {
          "c":{"cx":2}
      },
      {
          "c": {"z":"aa"}
      }
   ]
}

И это как test.jsonзавершится ошибкой, хотя я предполагаю, что он должен пройти:

{
  "count":3,
  "data":[
      {
          "a":{"ax":1}
      },
      {
          "b":{"bx":2}
      }
   ]
}

Кажется, неправильная схема проверяет, что массив dataсодержит a,b,cодин раз.

Какой должна быть правильная схема?

22
задан ThomasW 7 March 2013 в 05:59
поделиться