辞書を入れ子にしたJson(Python 2.7)に解析しています。私は時には変数に価値がないので、変数がないかどうか、変数が来るかどうかによって異なります。大丈夫ですが、私は引用の前にエスケープ文字を避けたいです。私が入れ子になったJsonを取得する前に、私はjson.loads()
を実行して文字列エスケープを削除します。Pythonはエラーを出さずにJsonにNoneをロードします
dictがない場合はNone
を返すのが問題です。
例コード:
import json
data1 = '{"foo":"bar"}'
data2 = None
sensor = {'header':'Info',
'data1': json.loads(data1),
'data2': json.loads(data2)}
output = json.dumps(sensor)
print(output)
予想される結果:
{"data2": null, "data1": {"foo": "bar"}, "header": "Info"}
受信したエラー:
Traceback (most recent call last):
File "\jsonDecoding.py", line 7, in <module>
'data2': json.loads(data2)}
File "\Python\Python35\lib\json\__init__.py", line 312, in loads
s.__class__.__name__))
TypeError: the JSON object must be str, not 'NoneType'
試み溶液:
class Decoder(json.JSONDecoder):
def default(self, obj):
if obj is None::
return None
else: return super(Decoder, self).default(obj)
data1 = '{"foo":"bar"}'
data2 = None
sensor = {'header':'Info',
'data1': json.loads(data1),
'data2': json.loads(data2, cls=Decoder)}
output = json.dumps(sensor)
私はDecoder.default()
の実装は問題を解決するはずだが、クラスを呼び出すが、デフォルトメソッドを呼び出さないと思った。
はkey
またはvalue
の代わりにNone
についての協議がたくさんありますが、私はあなたが難しく、それがあるよりも、問題を作ると思うオブジェクト全体
いいえ、 'data2'はあなたが' json.loads'するので、 '' null''でなければなりません。 –
'data2'はセンサーからの元の変数です。これは 'data1'と同じフォーマットの' json'の形式の文字列として来るか、全く来ないので 'None'です。たとえば 'blablabla'のようにJSON以外の文字列を既に持っている可能性があるので、' 'ヌル ''として – Tos