在python中解析json(来自freebase的响应)
这个问题与JSON
解析有关。我正在查询freebase以获取一些数据并获取JSON
个对象。响应具有以下结构
{
"result": [
{
"attribute0": [
"attrbVal0"
],
"attribute1": [],
"attribute2": "attrbVal1",
"attribute3": [
"val1",
"val2"
],
"creator": "abc",
"key": [
"val2",
"val3"
]
}
]
}
请注意,属性对任意数量的值都可以为零。没有值时,它表示为[]或null。 我不知道这组属性。它会随着查询的变化而变化,因此我无法对像
这样的值进行硬编码result['attribute2'];
从上面的JSON
我想获得值为[]
或null
的属性。
我尝试过以下方法来获取属性和值,
print response.keys()
打印结果
for r in response['result']:
print r
这样可以一次性打印结果中的所有内容。那是
print len(result) #prints 1
我已尝试以下方法获取属性列表,但没有运气。
result = response['result']
elem = json.loads(result);
keys = elem.keys()
所以我正在寻找代码来从上面的json中获取所有键值对,并且一些解释指出了我的错误。
答案 0 :(得分:2)
您可以循环遍历字典的项,同时为您提供键和值;然后,您可以过滤值:
for result in response['result']:
for attrname, value in result.items():
if not value: # empty list or None
print attrname
请注意response['result']
是一个列表,包含(可能)一个或多个字典对象。
在Python中,空列表和None
(相当于JSON null
的Python)在布尔上下文中被视为false,因此not value
为True
其值在原始JSON响应中为空列表或null
的属性。
演示:
>>> response = {
... "result": [
... {
... "attribute0": [
... "attrbVal0"
... ],
... "attribute1": [],
... "attribute2": "attrbVal1",
... "attribute3": [
... "val1",
... "val2"
... ],
... "creator": "abc",
... "key": [
... "val2",
... "val3"
... ]
... }
... ]
... }
>>> for result in response['result']:
... for attrname, value in result.items():
... if not value: # empty list or None
... print attrname
...
attribute1
因此,在您的示例输入中,只有attribute1
具有空值。