Jsonの文字列をloadsする際に例外が発生したことはありませんでしょうか?
本記事では事前に文字列がJsonフォーマットかどうかを判断する方法を紹介します。
Jsonフォーマット判定方法
Jsonフォーマットではない場合に出力されるエラー
はじめに、Jsonフォーマットではない文字列をjson.loadsした場合を確認します。
import json
ok_object = {
"key_1":1,
"key_2":True
}
# objectをjsonフォーマットの文字列に変換
ok_json_str = json.dumps(ok_object)
# NG用文字列を定義
ng_json_str = "not json format"
# json.loads可能
print(json.loads(ok_json_str))
# {'key_1': 1, 'key_2': True}
# json.loads不可能
print(json.loads(ng_json_str))
# json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Jsonフォーマットではない文字列をjson.loadsさせてみました。
エラーを確認すると一目瞭然ですが、例外json.decoder.JSONDecodeErrorが発生します。
このため、json.decoder.JSONDecodeErrorをキャッチすることによって判定が可能となります。
Jsonフォーマット判定する関数
次のプログラムでjson.loads可能かどうかを判定します。
import json
import sys
def is_json(json_str):
'''
json_strがjson.loads可能か判定
'''
result = False
try:
json.loads(json_str)
result = True
except json.JSONDecodeError as jde:
print( "[", json_str, "] is not in json format. \n", sys.exc_info())
return result
ok_object = {
"key_1":1,
"key_2":True
}
# objectをjsonフォーマットの文字列に変換
ok_json_str = json.dumps(ok_object)
# NG用文字列を定義
ng_json_str = "not json format"
print( is_json(ok_json_str) )
# True
print( is_json(ng_json_str) )
# [ not json format ] is not in json format.
# JSONDecodeError('Expecting value: line 1 column 1 (char 0)',)
# False
is_json関数によってjson.loads可能かどうかを判定しています。
0 件のコメント :
コメントを投稿