检查json python中的空字段

时间:2013-09-17 22:33:41

标签: python

一个非常幼稚的问题,但是有一种强大或更好的方法可以遵循。 说它实际上与json无关。

假设我有列表(从文件中读取)

string_list = [ "foo",1,None, "null","[]","bar"]

现在,null and []基本上等同于null,但不同的数据结构对" None"有不同的解释。正确?

所以,而不是我为所有这些规则编写正则表达式..是否有更好的方法来转换" null"," []"等等没有.. ??

由于

3 个答案:

答案 0 :(得分:2)

定义一组应该用None替换的值,并使用list comprehension来“替换”它们:

>>> string_list = [ "foo",1,None, "null","[]","bar"]
>>> none_items = {"null", "[]"}  # or set(("null", "[]"))
>>> [None if item in none_items else item for item in string_list]
['foo', 1, None, None, None, 'bar']

或者,使用map()

>>> map(lambda x: None if x in none_items else x, string_list)
['foo', 1, None, None, None, 'bar']

由于O(1)查找而使用set

答案 1 :(得分:1)

你可以尝试:

string_list = [ "foo",1,None, "null","[]","bar"]
nones = [ "null", "[]" ]
print([None if s in nones else s for s in string_list])

答案 2 :(得分:0)

1)您不应将任何内容转换为无。

2)你要做的第一件事是转换为json。 json模块将null转换为None,因此您不必担心null。并且空的json字符串,数组和对象将被转换为空的python字符串,列表和dicts,因此您根本不会处理字符串。

3)然后,如果你想过滤掉空对象,你可以这样做:

import json

my_data = json.loads("""
    [
        "hello", 
        "", 
        [], 
        {}, 
        [1, 2, 3], 
        {"a": 1, "b": 2}
    ] 
""")

print(my_data)
print([x for x in my_data if x])

--output:--
['hello', '', [], {}, [1, 2, 3], {'a': 1, 'b': 2}]
['hello', [1, 2, 3], {'a': 1, 'b': 2}]

空对象(包括0)计算为False。