2013-11-20 17 views
6

Tôi đang cố định nghĩa lược đồ json để giới hạn các thuộc tính của các đối tượng được kết hợp trong một mảng.lược đồ json để xác nhận hợp lệ mảng đối tượng với các yêu cầu anyOf và oneOf

Những gì tôi có cho đến nay là:

{ 
    "title":"myCollection", 
    "properties":{ 
     "things":{ 
      "type":"array", 
      "items":[{ 
       "title":"thingObj", 
       "type":"object", 
       "properties":{ 
        "name":{ 
         "type":"string" 
        }, 
        "code":{ 
         "type":"string" 
        }, 
        "type":{ 
         "type":"string", 
         "enum":["dog","cat"] 
        }, 
        "rate":{ 
         "type":"number" 
        }, 
        "value":{ 
         "type":"number" 
        } 
       }, 
       "anyOf":[{ 
        "properties":{ 
         "name":{ 
          "type":"string" 
         } 
        },"required":["name"] 
       },{ 
        "properties":{ 
         "code":{ 
          "type":"string" 
         } 
        },"required":["code"] 
       },{ 
        "properties":{ 
         "type":{ 
          "type":"string", 
          "enum":["new","existing"] 
         } 
        },"required":["type"] 
       }], 
       "oneOf":[{ 
        "properties":{ 
         "rate":{ 
          "type":"number" 
         } 
        }, 
        "required":["rate"] 
       },{ 
        "properties":{ 
         "value":{ 
          "type":"number" 
         } 
        }, 
        "required":["value"] 
       }], 
       "additionalProperties":false 
      }] 
     } 
    } 
} 

Bây giờ trao jsonobj sau:

{ 
    "things": [ 
     { 
      "name": "tabby", 
      "code": "meeow", 
      "type": "cat", 
      "value": 20 
     }, 
     { 
      "name": "k9", 
      "code": "woofer", 
      "type": "dog", 
      "rate": 15 
     } 
    ] 
} 

json schema validator này cung cấp một câu trả lời hợp lệ nhưng xác nhận này dường như chỉ áp dụng đối với các yếu tố đầu tiên trong mảng. Nếu bạn loại bỏ tất cả các trường được bao gồm trong mệnh đề anyOf hoặc mệnh đề oneOf trên phần tử đầu tiên thì xác thực không thành công. Điều tương tự trên phần tử mảng thứ hai không làm tăng sự thất bại mong muốn. Làm cách nào tôi có thể đảm bảo xác thực được chạy với từng thành viên mảng?

Trả lời

13

Điều này là do bạn có (vô tình) đã sử dụng "nhập văn bản". Điều này được bật khi giá trị của "items" là một mảng và nó khớp với các lược đồ đến các vị trí cụ thể trong mảng.

Nếu bạn thay đổi "items" (trong giản đồ của bạn) chỉ đơn giản là một lược đồ (không phải là một mảng các lược đồ), thì nó sẽ xác nhận tất cả các mục theo cùng một cách.

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