2013-07-09 33 views
8

Chúng tôi đã thực hiện xác nhận lược đồ json (sử dụng newtonsoft) trên lớp còn lại của chúng tôi. Nó thực sự tạo ra sự khác biệt, nhưng tôi có một câu hỏi về khả năng và cách thức.xác thực lược đồ json. Làm thế nào tôi có thể chấp nhận một mảng hoặc null?

Đối với một tài sản cụ thể, sau đây là hợp lệ (theo chủ sở hữu sản phẩm):

.... lựa chọn: [] .......

.... lựa chọn: [ "hello", "thế giới"]

.... sự lựa chọn: null .....

đây là một đẽo xuống ví dụ về định nghĩa schema json

{ 
    'description': 'myDescription', 
    'type': 'object', 
    'properties': 
    { 
    'name': {'type':'string', 'required': true}, 
    'description': {'type':'string'}, 
    'choices': {'type': 'array', 
     'items': {'type': 'string'}} 
} 

Rõ ràng là 2 ví dụ đầu tiên vượt qua xác thực, nhưng sau đó không thành công với lỗi "mong đợi một mảng".

Thuộc tính là tùy chọn.

Ngoài ra, nếu có ai có liên kết tốt đến bộ tài liệu đầy đủ về định nghĩa lược đồ json, tôi rất muốn có được nó. Tôi đã không tìm thấy một nguồn duy nhất tốt, nhưng tôi chắc chắn có một.

Cảm ơn bạn.

-r

Trả lời

14

Bạn có thể chỉ định một loạt các loại có thể như vậy;

"myProperty": { "type": [ "array", "null" ], "required":false } 

Json sẽ vượt qua xác thực nếu "myProperty" thuộc bất kỳ loại nào trong mảng của loại. Tôi đặt yêu cầu sai vì bạn đã nói đây là thuộc tính tùy chọn, điều đó sẽ chỉ làm cho nó vượt qua nếu thuộc tính không có trong json. Nếu bạn đã yêu cầu được đặt thành false và thuộc tính nằm trong json nhưng sai loại, xác thực sẽ không thành công.

Đây là các tài liệu tốt nhất về các lược đồ json mà tôi biết; http://json-schema.org/latest/json-schema-validation.html Trang web thiếu các ví dụ hữu ích nhưng bất kỳ chi tiết nào bạn cần đều có trong tài liệu.

+0

Cảm ơn bạn. Điều này giải quyết được vấn đề. Tôi cũng phát hiện ra 'type': 'any' cũng hữu ích trong một số thuộc tính của chúng ta, nơi kiểu phụ thuộc vào một số thuộc tính khác của tải trọng. –

+0

Trong googling hơn nữa, tôi thấy điều này cũng hữu ích và có một số ví dụ tốt hơn: http://tools.ietf.org/html/draft-zyp-json-schema-03 –

+0

@RogerJoys yeah Tôi đã xem xét điều đó. Nếu bạn đăng các câu hỏi lược đồ json khác trên SO, tôi sẽ trả lời chúng. Chúng được sử dụng khá tốt nên không có nhiều thông tin về chúng nhưng tôi đã sử dụng chúng một chút nên tôi biết ít nhất tất cả các khái niệm cơ bản cộng với một vài thủ thuật khác. – evanmcdonnal

1

Bạn đã cố gắng làm cho giá trị mặc định cho choices được []?

Tôi giả định, vì bạn đã nói thuộc tính là tùy chọn, nên bạn đang sử dụng cú pháp tham số tùy chọn trong C# hoặc tôi không chính xác?

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