2017-12-13 18 views
0

JSONレコードが無効である必要があり、Pythonでスキーマを検証するが、そのは真である値を示していない「jsonschema」

import json 
import jsonschema 
dat='{"TID":"9020","CUR":"USD","DAT1":"t","DAT2":11}' 

print type(dat) 
def validJson(rowData): 
    jsonRec=json.loads(rowData) 
    jsonSc=json.loads('''{ "title": "NCAP", "type": "object", "properties": { "TID" : { "type ": [ "string" ] },"CUR" : { "type ": [ "string" ] , "maxLength" : 3 },"DAT1" : { "type ": [ "number","null"] , "maximum" : 99999999999 },"DAT2" : { "type ": [ "number" ,"null"] , "maximum" : 112 } }, "required": [ "TID", "CUR", "DAT1", "DAT2" ] }''') 
    val = jsonschema.Draft3Validator(jsonSc).is_valid(jsonRec) 
    print "is records valid ::"+str(val) 
    va=jsonschema.validate(jsonRec, jsonSc) 
    print "records validated "+str(va) 
    return json.dumps(jsonRec) 

print validJson(dat) 

それが偽であるべき理由は、その値が "ながらDAT1データ型が数値であるということですT」

それとも、誰もがそれJSONレコードはあなたがあなたのtypeキーワードの後に​​スペースを持ってそのスキーマ

+1

なぜ無効にする必要があると思いますか? –

+0

http://jsonviewer.stack.hu/を使ってチェックしたところ、それはうまくいきました。 – Salman

+0

@cᴏʟᴅsFなぜFalseであるべきなのかという理由は、値が "t"のDAT1データ型は数字です。 –

答えて

0

に関して検証しますいくつかの方法を提案することができます。 Jsonスキーマはそれをキーワードとして認識せず、無視します。その余分なスペースを取り除くと、期待どおりに動作します。

+0

ありがとうございました! –