2017-09-02 2 views
0

一つは、以下を使用して、いくつかのJSONを検証しようとしているとValueErrorをスロー:json.loads()にかかわらず、常にJSON入力の私のテスト例

CONFIG = '../reconnoitre/config.json' 

print(is_json(CONFIG)) 

# return true is json is valid or false if unable to load 
def is_json(json_file): 
    try: 
    json_object = json.loads(json_file) 
    except ValueError: 
    return False 
    return True   

かかわらず、ルーチンは常にfalseを返し何JSON私はこれを渡すのたとえば、

{ 
    "test": "test" 
} 

false値を返します。関数の単純さを考えると、ファイルが有効なjsonであるかどうかを検証する良い方法がありますか?

+0

複数のデータで 'json.load()'またはjsonを試してみてください。何が起こるのですか? – campovski

答えて

1

json.loadsは、引数をjsonとして評価しようとしますが、ファイル名を指定しましたが、もちろん有効なjsonはありません。代わりに文字列に内容をロードし、それをjson.loadsに渡すか、あるいはそれ以上にするには、with open(...)ブロック内にjson.loadを使用します。

+0

それは...多くの意味があります。なぜ私はそれが私のためにファイルを開くだろうと思っていたのかどうか、深夜コーディング! – Codingo

+0

興味深いことに、これはうまくいきません。json_object = json.loads(str(open(json_file、 'r'))) '' ' – Codingo

+0

try:' open(json_file、 "r")をf: json_str = f.readall() 'として開き、' json_str'が 'loads'メソッドに渡されるように' json_file = "json.load(f)' – Jeronimo

関連する問題