2024-06-04 18:16:36 发布
网友
Python 2.7版
>>> json.loads('{"key":null,"key2":"yyy"}') {u'key2': u'yyy', u'key': None}
以上是默认行为。我想要的结果是:
{u'key2': u'yyy'}
有什么建议吗?谢谢!
在找到这个问题之前,我写了下面的解决方案。使用object_hook更好,但如果需要删除已解析JSON的所有嵌套元素,可以使用以下递归函数:
object_hook
def remove_nulls (d): if isinstance(d, dict): for k, v in list(d.items()): if v is None: del d[k] else: remove_nulls(v) if isinstance(d, list): for v in d: remove_nulls(v) return d
注意它会改变你现有的字典。
加载后可以过滤结果:
res = json.loads(json_value) res = {k: v for k, v in res.iteritems() if v is not None}
或者可以在可调用的object_hook中执行此操作:
def remove_nulls(d): return {k: v for k, v in d.iteritems() if v is not None} res = json.loads(json_value, object_hook=remove_nulls)
它也将处理递归字典。
对于Python 3,使用.items()而不是.iteritems()来有效地枚举字典的键和值。
.items()
.iteritems()
演示:
>>> import json >>> json_value = '{"key":null,"key2":"yyy"}' >>> def remove_nulls(d): ... return {k: v for k, v in d.iteritems() if v is not None} ... >>> json.loads(json_value, object_hook=remove_nulls) {u'key2': u'yyy'} >>> json_value = '{"key":null,"key2":"yyy", "key3":{"foo":null}}' >>> json.loads(json_value, object_hook=remove_nulls) {u'key3': {}, u'key2': u'yyy'}
在找到这个问题之前,我写了下面的解决方案。使用
object_hook
更好,但如果需要删除已解析JSON的所有嵌套元素,可以使用以下递归函数:注意它会改变你现有的字典。
加载后可以过滤结果:
或者可以在可调用的
object_hook
中执行此操作:它也将处理递归字典。
对于Python 3,使用
.items()
而不是.iteritems()
来有效地枚举字典的键和值。演示:
相关问题 更多 >
编程相关推荐