PythonでJSONからnullや空のキーを取り除く方法を紹介します。この方法は、レスポンスに含めないで返すような仕様を実装する際に役立ちます。
まず、以下のような関数を定義します。
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)}
この関数は、引数として辞書またはリストを受け取り、その中のnullや空のキーを取り除きます。
次に、この関数を使って実際にJSONからnullや空のキーを取り除く例を見てみましょう。
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))
このコードを実行すると、以下のような出力が得られます。
{
"str": "String",
"zero": 0,
"bool": false,
"object": {
"foo": "bar"
},
"array": [
"foo",
"bar"
],
"array_object": [
{
"foo": "bar"
},
{
"foo": "bar"
}
]
}
このように、PythonでJSONからnullや空のキーを取り除くことができます。