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

时间:2017-12-17 13:12:44

标签: python json nonetype

我正在将字典解析为嵌套的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()应该可以解决问题,但它会调用类,但不会调用默认方法。

关于Nonekey,有很多关于value的讨论,但我没有找到代替整个对象

1 个答案:

答案 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