我正在将字典解析为嵌套的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
或key
,有很多关于value
的讨论,但我没有找到代替整个对象
答案 0 :(得分:4)
我认为你使这个问题比现在更困难。我们可以构造一个$(document).ready(function(){
$('.collapsible').collapsible();
});
- 安全函数:
None
如果def nonesafe_loads(obj):
if obj is not None:
return json.loads(obj)
不 json.loads(obj)
,则会返回obj
,否则会返回None
。或者我们可以构建一个“尽力而为”的JSON加载,其目的是None
字符串,或者如果失败,则返回json.loads
本身:
obj
现在我们可以在程序中使用我们的def besteffort_loads(obj):
try:
return json.loads(obj)
except (TypeError, ValueError):
return obj
:
nonesafe_loads