web-dev-qa-db-ja.com

null値を持つJSONデータを辞書に変換する方法

{
  "abc": null,
  "def": 9
}

このようなJSONデータがあります。 nullでない場合(文字列として引用符なし)、astモジュールのliteral_evalを使用して上記を辞書に変換できます。

Pythonのディクショナリは、値としてnullを持つことはできませんが、値として"null"を持つことができます。上記をPythonが認識する辞書に変換するにはどうすればよいですか?

22
user2921139

組み込みの json module を使用する必要があります。これは、このタスク用に明示的に設計されたものです。

>>> import json
>>> data = '''
... {
...   "abc": null,
...   "def": 9
... }
... '''
>>> json.loads(data)
{'def': 9, 'abc': None}
>>> type(json.loads(data))
<class 'dict'>
>>>

ところで、JSONデータにnull値が含まれていない場合でも、このメソッドを使用する必要があります。動作する場合もありますが(時には)、ast.literal_evalは、文字列として表されるPythonコードを評価するために設計されました。 JSONデータを操作するのは、単に間違ったツールです。

37
iCodez

1つの解決策は、Noneを含む変数を使用することです。

import json
null = None
data = { "test": null }
json.dumps(data)
2
avimimoun