2016-10-11 11 views
2

私は、私は、Pythonを使用してプロパティ値を抽出しようとしていたからJSON文字列を持っている:プロパティがJSON文字列に存在しない場合、空の文字列を返す方法は?以下に示すように

def extract_property(node, to_extract): 
    data, stat = zk.get(node) 
    jsonString = data.decode("utf-8") 
    jStr = json.loads(jsonString) 
    return jStr[to_extract] 

今では可能であるが、私はそれには存在しません抽出しようとしているプロパティ値JSON文字列を指定すると失敗します。プロパティがJSON文字列内にまったく存在しない場合、空の文字列を返すにはどうしたらいいですか?

プロパティが存在しない場合、この行は失敗する可能性があります。

return jStr[to_extract] 
+0

'JSTRでto_extract場合:::JSTR [to_extract]他を返す:JSTRは[to_extract]場合' – Barmar

+0

はあなただけ '行くことができなかったことが問題だ場合は、次の例に広い範囲をカバーするかもしれませんreturn None' – MooingRawr

+0

@MooingRawrプロパティが存在しない場合、同じエラーが発生します。 – Barmar

答えて

1

単にdict.get()、すなわちを使用:

return jStr.get(to_extract, '') 

詳細はhttps://docs.python.org/3/library/stdtypes.html#dict.getを参照してください。

UPD:jStrが辞書であることが保証されていないことを指摘し@jezする

おかげで、。ただし、JSON解析の結果はわかります。辞書でない場合は、リスト、数値または文字列です。この場合、例えば、型チェックルーチンにそれをラップ:

try: 
    return jStr[to_extract] 
except (KeyError, AttributeError): 
    return '' 
+0

これはどうなりますか?私の理解のために少し説明できますか? – john

+0

リンク先のドキュメントはかなりわかりやすいようです – Batsu

+0

このPython 3の機能はありますか?それは私のためには全く役に立たない。私は2.7.3でアップグレードできません。 – john

1

はZaurのように、私もjStr.get(to_extract, '')示唆しているだろうが、私はこれまでOPの異議がjStrかもしれないかがないかもしれないということであると推定dictdictの場合、.get()はPython 2または3で動作します)。

try: return jStr[to_extract] 
except: return '' 
関連する問題