■ はじめに
https://dk521123.hatenablog.com/entry/2021/10/05/105550
で、json化するのに普段は、json.loads()を使っていたのだが astモジュールってのがあるのは知らなかった。
目次
【1】astモジュール 【2】literal_eval() 1)json.loads() との違い 【3】サンプル 例1:literal_eval()
【1】astモジュール
https://docs.python.org/ja/3.7/library/ast.html
より抜粋 ~~~~~~ ast --- 抽象構文木 ast モジュールは、Python アプリケーションで Python の抽象構文木を処理しやすくするものです。 ~~~~~~
抽象構文木(英: Abstract Syntax Tree; AST)
* 構造を木 (Tree) の形で表したもの
【2】literal_eval()
* 文字列をリストや辞書に変換
https://docs.python.org/ja/3.7/library/ast.html#ast.literal_eval
1)json.loads() との違い
* json.loads() は、JSONから外れた形式は変換できない * ast.literal_eval() は、変換可能 => 処理対象の仕様によって、使い分ければいい。
変換対象1)True/False, None
* json.loads() : NG * ast.literal_eval() : OK
変換対象2)true/false, null
* json.loads() : OK * ast.literal_eval() : NG
【3】サンプル
例1:literal_eval()
import ast # ex1: List print("ex1: List") string_value = '["a","b","c"]' list = ast.literal_eval(string_value) for value in list: print(f"value={value}") # ex2: Dict print("ex2: Dict") string_value = '{"key1": 10, "key2": True}' dict = ast.literal_eval(string_value) for index, (key, value) in enumerate(dict.items()): print(f"index={index}, key={key}, value={value}") # ex3: JSON print("ex3: JSON") string_value = '{ "Name": "Mike", "active": True, "friends": [ { "name": "Tom" } ]}, { "Name": "Sam" }' json = ast.literal_eval(string_value) for value in json: print(f"value={value}")
出力結果
ex1: List value=a value=b value=c ex2: Dict index=0, key=key1, value=10 index=1, key=key2, value=True ex3: JSON value={'Name': 'Mike', 'active': True, 'friends': [{'name': 'Tom'}]} value={'Name': 'Sam'}
参考文献
https://note.nkmk.me/python-ast-literal-eval/
では、json.loads()との違いも書いてあって非常に勉強になった。 感謝。。。
関連記事
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 基本編 / JSON ~
https://dk521123.hatenablog.com/entry/2019/10/19/104805
辞書
https://dk521123.hatenablog.com/entry/2019/10/27/100014
辞書・あれこれ
https://dk521123.hatenablog.com/entry/2020/10/11/000000
機密データの管理 ~ Secrets Manager / boto3 編 ~
https://dk521123.hatenablog.com/entry/2021/10/05/105550