2013-11-21 9 views
5

के तहत JSON डेटा सत्यापन, मैं रूबी मणि जेसन-स्कीमा के साथ कुछ जेसन डेटा को सत्यापित करने की कोशिश कर रहा हूं।जेएसओएन-स्कीमा

{ 
"$schema": "http://json-schema.org/draft-04/schema#", 
"title": "User", 
"description": "A User", 
"type": "object", 
"properties": { 
     "name": { 
      "description": "The user name", 
      "type": "string" 
     }, 
     "e-mail": { 
      "description": "The user e-mail", 
      "type": "string" 
     } 
}, 
"required": ["name", "e-mail"]  
} 

और निम्नलिखित json डेटा::

मैं निम्न स्कीमा है,

{ 
"name": "John Doe", 
"e-mail": "[email protected]", 
"username": "johndoe" 
} 

और JSON :: Validator.validate, इनपुट के रूप में इस डेटा का उपयोग कर सच देता है।

क्या यह गलत नहीं होना चाहिए क्योंकि उपयोगकर्ता नाम स्कीमा पर निर्दिष्ट नहीं है? अपेक्षा के अनुरूप

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "title": "User", 
    "description": "A User", 
    "type": "object", 
    "properties": { 
    "name": { 
     "description": "The user name", 
     "type": "string" 
    }, 
    "e-mail": { 
     "description": "The user e-mail", 
     "type": "string" 
    } 
    }, 
    "required": ["name", "e-mail"], 
    "additionalProperties": false 
} 

अब मान्यता false लौटना चाहिए:

उत्तर

6

आप false करने के लिए अपने JSON स्कीमा में additionalProperties को परिभाषित करने और यह निर्धारित करने की आवश्यकता

require 'json' 
require 'json-schema' 

schema = JSON.load('...') 
data = JSON.load('...') 
JSON::Validator.validate(schema, data) 
# => false 
+0

ध्यान दें कि यह विस्तार करने के लिए अपनी क्षमता को प्रतिबंधित करता है बाद में प्रारूप, क्योंकि सभी अतिरिक्त गुणों पर प्रतिबंध लगा दिया गया है। – cloudfeet

+1

@cloudfeet किस मामले में आप स्कीमा भी बढ़ाते हैं। –

+1

मेरा मतलब मूल वर्ग को संशोधित किए बिना विस्तार करना था - उदा। आपकी तीसरी पार्टी आपके प्रारूप को विस्तारित करती है, या आप अपनी कंपनी में किसी अन्य व्यक्ति द्वारा लिखे गए प्रारूप को विस्तारित करते हैं जो अजीब और पुनर्विक्रय है। – cloudfeet