2013-05-10 31 views
16

Cố gắng viết lược đồ JSON sử dụng RegEx để xác thực giá trị của một mục.Sử dụng RegEx trong Lược đồ JSON

Có một mục có tên là progBinaryName có giá trị nên phù hợp với chuỗi RegEx này "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$".

Không thể tìm thấy bất kỳ hướng dẫn hoặc ví dụ nào thực sự giải thích việc sử dụng RegEx trong lược đồ JSON.

Mọi trợ giúp/thông tin sẽ được đánh giá cao!

Cảm ơn, D

JSON SCHEMA

{ 
    "name": "string", 
    "properties": { 
     "progName": { 
      "type": "string", 
      "description": "Program Name", 
      "required": true 
     }, 
     "ID": { 
      "type": "string", 
      "description": "Identifier", 
      "required": true 
     }, 
     "progVer": { 
      "type": "string", 
      "description": "Version number", 
      "required": true 
     }, 
     "progBinaryName": { 
      "type": "string", 
      "description": "Actual name of binary", 
      "patternProperties": { 
       "progBinaryName": "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$" 
      }, 
      "required": true 
     } 
    } 
} 

LỖI:

Cảnh báo! Kiểm tra JSON của bạn tốt hơn.

Instance không phải là một loại yêu cầu - http://json-schema.org/draft-03/hyper-schema#


Schema là hợp lệ JSON, nhưng không phải là một sơ đồ hợp lệ. kết quả


Validation: thất bại

[ { 
    "level" : "warning", 
    "schema" : { 
     "loadingURI" : "#", 
     "pointer" : "" 
    }, 
    "domain" : "syntax", 
    "message" : "unknown keyword(s) found; ignored", 
    "ignored" : [ "name" ] 
}, { 
    "level" : "error", 
    "domain" : "syntax", 
    "schema" : { 
     "loadingURI" : "#", 
     "pointer" : "/properties/ID" 
    }, 
    "keyword" : "required", 
    "message" : "value has incorrect type", 
    "expected" : [ "array" ], 
    "found" : "boolean" 
}, { 
    "level" : "error", 
    "domain" : "syntax", 
    "schema" : { 
     "loadingURI" : "#", 
     "pointer" : "/properties/progBinaryName" 
    }, 
    "keyword" : "required", 
    "message" : "value has incorrect type", 
    "expected" : [ "array" ], 
    "found" : "boolean" 
}, { 
    "level" : "error", 
    "schema" : { 
     "loadingURI" : "#", 
     "pointer" : "/properties/progBinaryName/patternProperties/progBinaryName" 
    }, 
    "domain" : "syntax", 
    "message" : "JSON value is not a JSON Schema: not an object", 
    "found" : "string" 
}, { 
    "level" : "error", 
    "domain" : "syntax", 
    "schema" : { 
     "loadingURI" : "#", 
     "pointer" : "/properties/progName" 
    }, 
    "keyword" : "required", 
    "message" : "value has incorrect type", 
    "expected" : [ "array" ], 
    "found" : "boolean" 
}, { 
    "level" : "error", 
    "domain" : "syntax", 
    "schema" : { 
     "loadingURI" : "#", 
     "pointer" : "/properties/progVer" 
    }, 
    "keyword" : "required", 
    "message" : "value has incorrect type", 
    "expected" : [ "array" ], 
    "found" : "boolean" 
} ] 

Problem with schema#/properties/progBinaryName/patternProperties/progBinaryName : Instance is not a required type 
Reported by http://json-schema.org/draft-03/hyper-schema# 
Attribute "type" (["object"]) 
+1

Điều gì không hoạt động? (Bạn có thể muốn đặt dấu gạch nối đó ở cuối lớp nhân vật) –

+0

Bất kỳ xác thực trực tuyến nào không hoạt động đúng. – Destroyer

+2

"Không hoạt động đúng" nghĩa là gì? Bạn có được dương tính giả không? Bạn nhận được âm tính giả? Bạn có nhận được một số loại lỗi? –

Trả lời

35

Để kiểm tra một giá trị chuỗi (không phải là một tên thuộc tính) chống lại một RegEx, bạn nên sử dụng "pattern" keyword:

{ 
    "type": "object", 
    "properties": { 
     "progBinaryName": { 
      "type": "string", 
      "pattern": "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$" 
     } 
    } 
} 

T.B. - nếu bạn muốn mẫu khớp với khóa cho thuộc tính (không phải giá trị), thì bạn nên sử dụng "patternProperties" (giống như "properties", nhưng khóa là RegEx).

10

cú pháp giản đồ JSON của bạn không đúng. Thay đổi

"patternProperties": { 
    "progBinaryName": "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$" 
    } 

để

"patternProperties": { 
    "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$": {} 
    } 
+1

Cảm ơn bạn đã cung cấp câu trả lời và không lãng phí thời gian của tôi. Nhiều, nhiều đánh giá cao! – Destroyer

+0

Không phải là câu hỏi về việc thử nghiệm giá trị * *, không phải là tên thuộc tính? – cloudfeet

+0

Bạn nói đúng. Câu trả lời của bạn phải là câu trả lời được chấp nhận. –