23

Python に文字列があります。それが有効な JSON かどうかを知りたいです。

json.loads(mystring) 文字列が JSON でない場合はエラーが発生しますが、例外をキャッチしたくありません。

私はこのようなものが欲しいのですが、うまくいきません:

if type(mysrting) == dict:
    myStrAfterLoading = json.loads(mystring)
else:
    print "invalid json passed"

文字列が JSON かどうかを確認するには、その ValueError をキャッチする必要がありますか?

4

5 に答える 5

57

正解は次のとおりValueErrorです。

Python スクリプトの例は、文字列が有効な json の場合にブール値を返します。

import json

def is_json(myjson):
    try:
        json_object = json.loads(myjson)
    except ValueError as e:
        return False
    return True

print(is_json('{}'))              # prints True
print(is_json('{asdf}'))          # prints False
print(is_json('{"age":100}'))     # prints True
print(is_json('{'age':100 }'))    # prints False
print(is_json('{"age":100 }'))    # prints True
于 2012-07-02T13:27:28.140 に答える
27

文字列を検証するには、それを解析する必要があります。そのため、チェックしてから変換すると、文字どおり 2 倍の時間がかかります。例外をキャッチすることが最善の方法です。興味深いことに、if-else スタイルの式を引き続き使用できます。

try:
    json_object = json.loads(json_string)
except ValueError, e:
    pass # invalid json
else:
    pass # valid json
于 2012-07-02T13:21:47.213 に答える
10

例外をキャッチしたくない理由はありますか?

例外のテストとキャッチは、Python では非常に高速であり、多くの場合、型をテストするのではなく、Python のやり方であることに注意してください (基本的に、ダック タイピングを信頼し、それに応じて反応します)。

もう少し安心するために、ここを見てください: Python if vs try-except

それでも読みやすさが心配な場合は、コードにコメントを追加して、try/except を使用している理由を説明してください ;)

私は過去にJavaのバックグラウンドから来て、このアプローチに苦労しましたが、これ確かにPythonでこれを行う最も簡単な方法です...そして単純なものは複雑なものよりも優れています.

于 2012-07-02T13:22:18.413 に答える