【发布时间】:2018-05-31 00:41:40
【问题描述】:
我正在将字典解析为嵌套的 Json (Python 2.7)。我遇到的问题是有时变量没有值,所以它需要 None,这取决于变量是否出现。没关系,但我想在引号之前避免转义字符。在我嵌套 Json 之前,我会使用 json.loads() 来删除字符串转义。
如果没有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() 应该可以解决问题,但它调用了类但不调用默认方法。
有很多关于None 代替key 或value 的讨论,但我没有找到整个对象的位置
【问题讨论】:
-
不,
data2,应该是'null',因为你json.loads它。 -
data2是传感器的原始变量。它要么以json形式的字符串形式出现,格式与data1相同,要么根本不出现,因此它是None。它永远不会像'null'