以下是我从google bigquery到解析的数据:
{
u'kind': u'bigquery#queryResponse',
u'rows': [
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'995'
},
{
u'v': u'1600'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'942'
},
{
u'v': u'1607'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'937'
},
{
u'v': u'1599'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'894'
},
{
u'v': u'1598'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'848'
},
{
u'v': u'1592'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'841'
},
{
u'v': u'1590'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'786'
},
{
u'v': u'1603'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'779'
},
{
u'v': u'1609'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'762'
},
{
u'v': u'1597'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'753'
},
{
u'v': u'1594'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'740'
},
{
u'v': u'1596'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'738'
},
{
u'v': u'1612'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'718'
},
{
u'v': u'1590'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'717'
},
{
u'v': u'1610'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'715'
},
{
u'v': u'1602'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'680'
},
{
u'v': u'1606'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'674'
},
{
u'v': u'1603'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'639'
},
{
u'v': u'1603'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'637'
},
{
u'v': u'1603'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'634'
},
{
u'v': u'1590'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'633'
},
{
u'v': u'1599'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'616'
},
{
u'v': u'1596'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'614'
},
{
u'v': u'1596'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'612'
},
{
u'v': u'1595'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'607'
},
{
u'v': u'1603'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'579'
},
{
u'v': u'1593'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'570'
},
{
u'v': u'1600'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'541'
},
{
u'v': u'1599'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'525'
},
{
u'v': u'1608'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'520'
},
{
u'v': u'1599'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'518'
},
{
u'v': u'1602'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'486'
},
{
u'v': u'1595'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'470'
},
{
u'v': u'1593'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'433'
},
{
u'v': u'1609'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'429'
},
{
u'v': u'1607'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'421'
},
{
u'v': u'1611'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'399'
},
{
u'v': u'1592'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'363'
},
{
u'v': u'0'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'353'
},
{
u'v': u'1594'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'287'
},
{
u'v': u'1609'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'106'
},
{
u'v': u'0'
}
]
},
{
u'f': [
{
u'v': u'the'
},
{
u'v': u'57'
},
{
u'v': u'1609'
}
]
}
],
u'jobReference': {
u'projectId': u'670640819051',
u'jobId': u'job_5bf745fcee8b470e997d8ea90f380e68'
},
u'jobComplete': True,
u'totalRows': u'42',
u'schema': {
u'fields': [
{
u'type': u'STRING',
u'name': u'word',
u'mode': u'NULLABLE'
},
{
u'type': u'INTEGER',
u'name': u'word_count',
u'mode': u'NULLABLE'
},
{
u'type': u'INTEGER',
u'name': u'corpus_date',
u'mode': u'NULLABLE'
}
]
}
}
作为一个Python newbee,我真的不知道如何解析这些数据来创建一个json对象,如下所示:
[
{'count': 200, 'year': 2008},
{'count': 240, 'year': 2010},
{'count': 290, 'year': 2009}
]
任何人都可以给我任何关于如何开始的提示吗?
示例
[{u'v': u'the'}, {u'v': u'995'}, {u'v': u'1600'}]
对于单词'the'
,count
为995,year
为1600.接下来就是这样。
答案 0 :(得分:26)
如果'Z'是你的大词典,在'回复'上你将得到你需要的结构。
import json
response = []
for row in z['rows']:
for key, dict_list in row.iteritems():
count = dict_list[1]
year = dict_list[2]
response.append({'count': count['v'], 'year' : year['v']})
print json.dumps(response)
在回复时,您将获得以下信息:
[{'count': u'995', 'year': u'1600'},
{'count': u'942', 'year': u'1607'},
{'count': u'937', 'year': u'1599'},
{'count': u'894', 'year': u'1598'},
{'count': u'848', 'year': u'1592'},
{'count': u'841', 'year': u'1590'},
{'count': u'786', 'year': u'1603'},
{'count': u'779', 'year': u'1609'},
{'count': u'762', 'year': u'1597'},
{'count': u'753', 'year': u'1594'},
{'count': u'740', 'year': u'1596'},
{'count': u'738', 'year': u'1612'},
{'count': u'718', 'year': u'1590'},
{'count': u'717', 'year': u'1610'},
{'count': u'715', 'year': u'1602'},
{'count': u'680', 'year': u'1606'},
{'count': u'674', 'year': u'1603'},
{'count': u'639', 'year': u'1603'},
{'count': u'637', 'year': u'1603'},
{'count': u'634', 'year': u'1590'},
{'count': u'633', 'year': u'1599'},
{'count': u'616', 'year': u'1596'},
{'count': u'614', 'year': u'1596'},
{'count': u'612', 'year': u'1595'},
{'count': u'607', 'year': u'1603'},
{'count': u'579', 'year': u'1593'},
{'count': u'570', 'year': u'1600'},
{'count': u'541', 'year': u'1599'},
{'count': u'525', 'year': u'1608'},
{'count': u'520', 'year': u'1599'},
{'count': u'518', 'year': u'1602'},
{'count': u'486', 'year': u'1595'},
{'count': u'470', 'year': u'1593'},
{'count': u'433', 'year': u'1609'},
{'count': u'429', 'year': u'1607'},
{'count': u'421', 'year': u'1611'},
{'count': u'399', 'year': u'1592'},
{'count': u'363', 'year': u'0'},
{'count': u'353', 'year': u'1594'},
{'count': u'287', 'year': u'1609'},
{'count': u'106', 'year': u'0'},
{'count': u'57', 'year': u'1609'}]
我相信你需要的东西。
不仅要使用json并对响应执行json.dumps
,那就是它。
答案 1 :(得分:4)
您可以使用模块json轻松地将python对象转换为JSON对象,反之亦然。 基本上只有两个类: JSONEncoder 和 JSONDecoder :第一个将python集合转换为JSON字符串,第二个将JSON字符串转换为Python对象。
示例:
from json import JSONEncoder
jsonString = JSONEncoder().encode({
"count": 222,
"year": 2012
})
上面的代码将从Python字典生成一个JSON字符串
from json import JSONDecoder
pyDictionary = JSONDecoder().decode('{"count": 222, "year": 2012}')
上面的代码将从JSON字符串生成python字典
答案 2 :(得分:0)
版本0.28.0
以及google-cloud-bigquery
library的更高版本使用Row
类来解析表或查询中的行。
例如,打印带有架构
的查询的结果[
{
u'type': u'STRING',
u'name': u'word',
u'mode': u'NULLABLE'
},
{
u'type': u'INTEGER',
u'name': u'word_count',
u'mode': u'NULLABLE'
},
{
u'type': u'INTEGER',
u'name': u'corpus_date',
u'mode': u'NULLABLE'
},
]
如你的例子,可以做
query = client.query('...')
rows = query.result()
for row in rows:
# Access by column index.
print('word: {}'.format(row[0]))
# Access by column name.
# The library parses the result into an integer object,
# based on the schema.
print('word_count: {}'.format(row['word_count']))
# Access by column name, like an attribute.
print('corpus_date: {}'.format(row.corpus_date))
在版本0.29.0
(2017-12-04尚未发布)中,将有keys()
,values()
,items()
和{{1}的方法就像一个内置的字典对象一样。 (在PR #4393中添加)因此,要将行转换为get()
中类似JSON的字典:
0.29.0