2017-10-27 14 views
7

Với đối tượng JSON này:JSONSchema và xác nhận sub-object tính

{ 
    "objects": { 
     "foo": { 
      "id": 1, 
      "name": "Foo" 
     }, 
     "bar": { 
      "id": 2, 
      "name": "Bar" 
     } 
    } 
} 

Đây là một đối tượng chứa các đối tượng phụ trong đó mỗi đối tượng phụ có cấu trúc giống nhau - tất cả họ đang cùng loại. Mỗi đối tượng phụ được khóa duy nhất, do đó, nó hoạt động như một mảng được đặt tên.

Tôi muốn xác thực rằng mỗi đối tượng trong thuộc tính objects xác thực dựa trên tham chiếu Lược đồ JSON.

Nếu objects bất động sản là một mảng, chẳng hạn như:

{ 
    "objects": [ 
    { 
     "id": 1, 
     "name": "Foo" 
    }, 
    { 
     "id": 2, 
     "name": "Bar" 
    } 
    ] 
} 

tôi có thể xác nhận điều này với một định nghĩa giản đồ như:

{ 
    "id": "my-schema", 
    "required": [ 
    "objects" 
    ], 
    "properties": { 
    "objects": { 
     "type": "array", 
     "items": { 
     "type": "object", 
     "required": [ 
      "id", 
      "name" 
     ], 
     "properties": { 
      "id": { 
      "type": "integer" 
      }, 
      "name": { 
      "type": "string" 
      } 
     } 
     } 
    } 
    } 
} 

Điều này đạt được bởi vì typearray, và điều này cho phép xác thực của items.

Có thể làm điều tương tự, nhưng với đối tượng lồng nhau không?

Cảm ơn!

Trả lời

3

Bạn có thể thử một cái gì đó như thế này:

{ 
    "id": "my-schema", 
    "type": "object", 
    "properties": { 
    "objects": { 
     "type": "object", 
     "patternProperties": { 
     "[a-z]+": { 
      "type": "object", 
      "properties": { 
      "id": { 
       "type": "integer" 
      }, 
      "name": { 
       "type": "string" 
      } 
      }, 
      "additionalProperties": false, 
      "required": [ 
      "id", 
      "name" 
      ] 
     } 
     } 
    } 
    } 
} 
0

Câu trả lời trên hoạt động để hạn chế các tên thuộc tính đối tượng để chữ thường. Nếu bạn không cần phải hạn chế các tên thuộc tính, thì đây là đơn giản:

{ 
    "id": "my-schema", 
    "type": "object", 
    "properties": { 
    "objects": { 
     "type": "object", 
     "additionalProperties": { 
     "type": "object", 
     "properties": { 
      "id": { 
      "type": "integer" 
      }, 
      "name": { 
      "type": "string    } 
      } 
     }, 
     "required": [ 
      "id", 
      "name" 
     ] 
     } 
    } 
    } 
} 

tôi bỏ qua khu vực nội "additionalProperties": false từ câu trả lời ở trên vì tôi thấy rằng việc sử dụng từ khóa đó gây ra vấn đề hơn nó giải quyết, nhưng nó là một sử dụng hợp lệ của từ khóa nếu bạn muốn xác nhận thất bại trên các đối tượng bên trong nếu chúng có các thuộc tính khác với "tên" và "id".

Các vấn đề liên quan