[Python]文字列がjson.loadsできるか判定する

2022年1月9日日曜日

Python

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可能かどうかを判定しています。

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology