2014-12-08 17 views
7

Tôi có một đối tượng JSON có thể chứa bất kỳ số lượng đối tượng lồng nhau với đặc điểm kỹ thuật nhất định, ví dụ:điển giống như JSON schema

{ 
    "Bob": { 
    "age": "42", 
    "gender": "male" 
    }, 
    "Alice": { 
    "age": "37", 
    "gender": "female" 
    } 
} 

Và muốn có một sơ đồ tìm kiếm một cái gì đó như:

{ 
    "type": "object", 
    "propertySchema": { 
    "type": "object", 
    "required": [ 
     "age", 
     "gender" 
    ], 
    "properties": { 
     "age": { 
     "type": "string" 
     }, 
     "gender": { 
     "type": "string" 
     } 
    } 
    } 
} 

Tôi biết rằng tôi có thể biến nó thành mảng và đẩy 'tên' bên trong các đối tượng. Trong trường hợp đó, lược đồ của tôi sẽ trông giống như:

{ 
    "type": "array", 
    "items": { 
    "type": "object", 
    "required": [ 
     "name", 
     "age", 
     "gender" 
    ], 
    "properties": { 
     "name": { 
     "type": "string" 
     }, 
     "age": { 
     "type": "string" 
     }, 
     "gender": { 
     "type": "string" 
     } 
    } 
    } 
} 

nhưng tôi muốn có cấu trúc giống từ điển. Có thể tạo lược đồ như vậy không?

Trả lời

17

additionalProperties là từ khóa của bạn:

{ 
    "type" : "object", 
    "additionalProperties" : { 
     "type" : "object", 
     "required" : [ 
      "age", 
      "gender" 
     ], 
     "properties" : { 
      "age" : { 
       "type" : "string" 
      }, 
      "gender" : { 
       "type" : "string" 
      } 
     } 
    } 
} 

additionalProperties có thể có giá trị sau với ý nghĩa khác nhau:

  • "additionalProperties": false Không nhiều thuộc tính được phép ở tất cả.
  • "additionalProperties": true Bất kỳ thuộc tính nào khác đều được phép. Đây là hành vi mặc định.
  • "additionalProperties": {"type": "string"} Thuộc tính bổ sung (tên tùy ý) được cho phép, nếu chúng có giá trị của loại đã cho ("chuỗi" ở đây).
  • "additionalProperties": {*any schema*} Thuộc tính bổ sung phải đáp ứng giản đồ được cung cấp, chẳng hạn như ví dụ được cung cấp ở trên.
+0

Cảm ơn câu trả lời hay. Tôi đã thêm vài dòng giải thích ý nghĩa khác nhau của "additionalProperties". –

+0

Cảm ơn @JanVlcinsky vì đã tăng cường câu trả lời (mặc dù việc sử dụng tiêu đề cho đoạn mã có vẻ hơi quá mức đối với tôi). – jruizaranguren

+0

Hãy thoải mái chỉnh sửa theo ý muốn của bạn. Đó là lý do tôi đã thông báo cho bạn. Tôi thường sử dụng các tiêu đề để cung cấp thông tin quan trọng theo cách trực quan hơn một chút, nhưng đôi khi nó có thể cảm thấy nhiều, tôi đồng ý. –

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