检查python中是否存在json响应行

时间:2012-11-27 19:03:44

标签: python json parsing

这是我的json回复

  

{u'kind':u'bigquery#queryResponse',u'rows':[{u'f':[{u'v':u'1'},{u'v':u'1607 '},{u'v':u'coriolanus'}]},{u'f':[{u'v':u'1'},{u'v':u'1596'},{u 'v':u'kingjohn'}]},{u'f':[{u'v':u'1'},{u'v':u'1599'},{u'v':u 'kinghenryv'}]},{u'f':[{u'v':u'1'},{u'v':u'1600'},{u'v':u'merrywivesofwindsor'}] },{u'f':[{u'v':u'1'},{u'v':u'1602'},{u'v':u'troilusandcressida'}]},{u' f':[{u'v':u'1'},{u'v':u'1592'},{u'v':u'comedyoferrors'}]},{u'f':[{ u'v':u'2'},{u'v':u'1590'},{u'v':u'3kinghenryvi'}]},{u'f':[{u'v': u'2'},{u'v':u'1612'},{u'v':u'kinghenryviii'}]},{u'f':[{u'v':u'2'} ,{u'v':u'1598'},{u'v':u'2kinghenryiv'}]}],u'jobReference':{u'projectId':u'1039435439624',u'jobId':u 'job_ffb30cfb23674f88aa5cb497e358ec05'},u'jobComplete':是的,u'totalRows':u'9',u'schema':{u'fields':[{u'type':u'INTEGER',u'name': u'sum_for_the',u'mode':u'NULLABLE'},{u'type':u'INTEGER',u'name':u'corpus_date',u'mode':u'NULLABLE'},{u 'type':u'STRING',你''':u'f0_',你'mode':u'NULLABLE'}]}}

我使用下面的python代码

进行循环
resp = []
for row in listReply['rows']:
  for key,dict_list in row.iteritems():
    count = dict_list[0]
    year = dict_list[1]
    corpus = dict_list[2]
    resp.append({'count': count['v'],'year':year['v'],'corpus':corpus['v']})

如何检查listReply['rows']是否存在,如json响应,如下面

  

{u'totalRows':u'0',u'kind':u'bigquery #queryResponse',u'jobComplete':True,u'jobReference':{u'projectId':u'1039435439624',u 'jobId':u'job_8efc645852c34515bcff4ab3969772fd'},u'schema':{u'fields':[{u'type':u'INTEGER',u'name':u'sum_for_the',u'mode':你' NULLABLE'},{u'type':u'INTEGER',u'name':u'corpus_date',u'mode':u'NULLABLE'},{u'type':u'STRING',你的名字':u'f0_',u'mode':'u'NULLABLE'}]}}

3 个答案:

答案 0 :(得分:4)

for row in listReply.get('rows', []):

如果listReply有一个键“rows”,这将迭代相应的值。如果密钥不存在,则返回默认值,在这种情况下应该是空列表,因此for不会抱怨,因为它是可迭代的。

另一种方法是在进入for循环之前测试密钥。

if 'rows' in listReply:
    for row in listReply['rows']:
        ...

答案 1 :(得分:3)

您可以使用

if key in aDict:
  # Operations

测试python词典中是否存在条目。如果它是一个空列表,你也可以这样做:

if key in aDict and aDict[key]:
  # Operations

由于评估是从左到右,如果缺少密钥,则不会执行第二次检查,但如果它存在且为空,则第二次检查将跳过操作。

答案 2 :(得分:0)

要检查dict中是否存在密钥,请使用in关键字。

>>> d = {}
>>> 1 in d
16: False
>>> d[1] = 1
>>> 1 in d
17: True
>>> d
18: {1: 1}

所以要使用你的例子

>>> d = {u'totalRows': u'0', u'kind': u'bigquery#queryResponse', u'jobComplete': True, u'jobReference': {u'projectId': u'1039435439624', u'jobId': u'job_8efc645852c34515bcff4ab3969772fd'}, u'schema': {u'fields': [{u'type': u'INTEGER', u'name': u'sum_for_the', u'mode': u'NULLABLE'}, {u'type': u'INTEGER', u'name': u'corpus_date', u'mode': u'NULLABLE'}, {u'type': u'STRING', u'name': u'f0_', u'mode': u'NULLABLE'}]}}
>>> 'rows' in d
19: False