gpt4 book ai didi

Python 将 None 加载到 Json 而不会发出错误

转载 作者:行者123 更新时间:2023-11-28 22:22:05 27 4
gpt4 key购买 nike

我正在将字典解析为嵌套的 Json (Python 2.7)。我遇到的问题是有时变量没有值所以它不需要,这取决于变量是否出现。没关系,但我想避免在引号前使用转义字符。在我得到嵌套的 Json 之前,我执行 json.loads() 来删除字符串转义。

问题是如果没有字典则返回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() 应该可以解决问题,但它调用类但不调用默认方法。

有很多关于 None 代替 keyvalue 的讨论,但我没有找到代替 whole object

最佳答案

我认为你让问题变得更难了。我们可以构建一个 None 安全函数:

def nonesafe_loads(obj):
if obj is not None:
return json.loads(obj)

这将返回 json.loads(obj) 如果 objnot None,否则它将返回 None。或者我们可以构建一个“尽力而为”的 JSON 加载,旨在 json.loads 字符串,或者在失败的情况下返回 obj 本身:

def besteffort_loads(obj):
try:
return json.loads(obj)
except (TypeError, ValueError):
return obj

现在我们可以在程序中使用我们的nonesafe_loads:

data1 = '{"foo":"bar"}'
data2 = None
sensor = {'header':'Info',
'data1': <b>nonesafe_loads(</b>data1<b>)</b>,
'data2': <b>nonesafe_loads(</b>data2<b>)</b>}
output = json.dumps(sensor)

关于Python 将 None 加载到 Json 而不会发出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47855469/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com