PythonでJSONからnullや空のキーを取り除く
みたいな仕様を実装したくて調べました。
GitHub Gistにそのまま使えそうなコードを発見。
https://gist.github.com/nlohmann/c899442d8126917946580e7f84bf7ee7
こちらを拝借。
空文字も落としたかったのでちょっと修正して動作確認。
import json
def remove_empty_elements(d):
def empty(x):
return x is None or x == {} or x == [] or x == ""
if not isinstance(d, (dict, list)):
return d
elif isinstance(d, list):
return [v for v in (remove_empty_elements(v) for v in d) if not empty(v)]
else:
return {k: v for k, v in ((k, remove_empty_elements(v)) for k, v in d.items()) if not empty(v)}
if __name__ == '__main__':
foo = {
"str": "String",
"empty_str": "",
"none": None,
"zero": 0,
"bool": False,
"object": {
"foo": "bar",
"none": None,
"empty_str": "",
},
"empty_object": {},
"array": ["foo", "bar", ""],
"empty_array": [],
"array_object":[
{
"foo": "bar",
"none": None,
"empty_str": "",
},
{
"foo": "bar",
"none": None,
"empty_str": "",
},
{},
]
}
bar = remove_empty_elements(foo)
print(json.dumps(bar, indent=4))
>python3 remove_empty_elements.py
{
"str": "String",
"zero": 0,
"bool": false,
"object": {
"foo": "bar"
},
"array": [
"foo",
"bar"
],
"array_object": [
{
"foo": "bar"
},
{
"foo": "bar"
}
]
}
ディスカッション
コメント一覧
まだ、コメントがありません