2014-02-23 107 views
0

我有以下JSON转储。我喜欢提取术语(例如“作业”)和计数(例如“46”)通过JSON解析

{u'kind': u'bigquery#queryResponse', u'rows': [{u'f': [{u'v': u'jobs'}, {u'v': u'46'}]},  {u'f': [{u'v': u'employment'}, {u'v': u'24'}]}, {u'f': [{u'v': u'Employment'}, {u'v': u'20'}]}, {u'f': [{u'v': u'donate furniture'}, {u'v': u'16'}]}, {u'f': [{u'v': u'feeding the homeless'}, {u'v': u'16'}]}, {u'f': [{u'v': u'Perth stores'}, {u'v': u'14'}]}, {u'f': [{u'v': u'bed'}, {u'v': u'14'}]}, {u'f': [{u'v': u'Jobs'}, {u'v': u'14'}]}, {u'f': [{u'v': u'food parcels'}, {u'v': u'14'}]}, {u'f': [{u'v': u'history'}, {u'v': u'14'}]}, {u'f': [{u'v': u'Adherent'}, {u'v': u'12'}]}, {u'f': [{u'v': u'volunteer'}, {u'v': u'12'}]}, {u'f': [{u'v': u'Historical society'}, {u'v': u'12'}]}, {u'f': [{u'v': u'Donate furniture'}, {u'v': u'12'}]}, {u'f': [{u'v': u'pick up'}, {u'v': u'12'}]}, {u'f': [{u'v': u'Careers'}, {u'v': u'12'}]}, {u'f': [{u'v': u'contact'}, {u'v': u'12'}]}, {u'f': [{u'v': u'helping with a funeral'}, {u'v': u'10'}]}, {u'f': [{u'v': u'Basketball'}, {u'v': u'10'}]}, {u'f': [{u'v': u'email'}, {u'v': u'10'}]}], u'jobReference': {u'projectId': u'2323', u'jobId': u'2323'}, u'jobComplete': True, u'totalRows': u'20', u'totalBytesProcessed': u'0', u'cacheHit': True, u'schema': {u'fields': [{u'type': u'STRING', u'name': u'Query', u'mode': u'NULLABLE'}, {u'type': u'INTEGER', u'name': u'Count', u'mode': u'NULLABLE'}]}} 

我喜欢以表格格式打印术语和计数。

我有一个函数来做到这一点:

print_two_cols(term1,term2) 

但我不知道如何通过上面的JSON迭代。我正在使用Python 2.7。

+2

这不是JSON。这不是什么关闭json ... –

+0

这就是我从BigQuery得到的结果 –

+0

这不是JSON字符串,但它看起来像是如果使用json模块解析JSON会得到什么结果。 – user2357112

回答

2

通过rows键循环;每个条目是一个f关键一本字典,字典包含与v键:

for row in result['rows']: 
    job, count = (col['v'] for col in row['f']) 
    print_two_cols(job, count) 

演示:

>>> result = {u'kind': u'bigquery#queryResponse', u'rows': [{u'f': [{u'v': u'jobs'}, {u'v': u'46'}]},  {u'f': [{u'v': u'employment'}, {u'v': u'24'}]}, {u'f': [{u'v': u'Employment'}, {u'v': u'20'}]}, {u'f': [{u'v': u'donate furniture'}, {u'v': u'16'}]}, {u'f': [{u'v': u'feeding the homeless'}, {u'v': u'16'}]}, {u'f': [{u'v': u'Perth stores'}, {u'v': u'14'}]}, {u'f': [{u'v': u'bed'}, {u'v': u'14'}]}, {u'f': [{u'v': u'Jobs'}, {u'v': u'14'}]}, {u'f': [{u'v': u'food parcels'}, {u'v': u'14'}]}, {u'f': [{u'v': u'history'}, {u'v': u'14'}]}, {u'f': [{u'v': u'Adherent'}, {u'v': u'12'}]}, {u'f': [{u'v': u'volunteer'}, {u'v': u'12'}]}, {u'f': [{u'v': u'Historical society'}, {u'v': u'12'}]}, {u'f': [{u'v': u'Donate furniture'}, {u'v': u'12'}]}, {u'f': [{u'v': u'pick up'}, {u'v': u'12'}]}, {u'f': [{u'v': u'Careers'}, {u'v': u'12'}]}, {u'f': [{u'v': u'contact'}, {u'v': u'12'}]}, {u'f': [{u'v': u'helping with a funeral'}, {u'v': u'10'}]}, {u'f': [{u'v': u'Basketball'}, {u'v': u'10'}]}, {u'f': [{u'v': u'email'}, {u'v': u'10'}]}], u'jobReference': {u'projectId': u'2323', u'jobId': u'2323'}, u'jobComplete': True, u'totalRows': u'20', u'totalBytesProcessed': u'0', u'cacheHit': True, u'schema': {u'fields': [{u'type': u'STRING', u'name': u'Query', u'mode': u'NULLABLE'}, {u'type': u'INTEGER', u'name': u'Count', u'mode': u'NULLABLE'}]}} 
>>> for row in result['rows']: 
...  job, count = (col['v'] for col in row['f']) 
...  print job, count 
... 
jobs 46 
employment 24 
Employment 20 
donate furniture 16 
feeding the homeless 16 
Perth stores 14 
bed 14 
Jobs 14 
food parcels 14 
history 14 
Adherent 12 
volunteer 12 
Historical society 12 
Donate furniture 12 
pick up 12 
Careers 12 
contact 12 
helping with a funeral 10 
Basketball 10 
email 10 
+0

谢谢你。像魅力一样工作。我是python的新手,不知道我能做到这一点。 –