9

这是我从 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 新手,我真的不知道如何解析这些数据以创建如下所示的 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 和year1600。所以它遵循。

4

3 回答 3

27

如果“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响应进行处理,仅此而已。

于 2012-11-23T14:41:13.610 回答
6

您可以使用 json 模块轻松地将 python 对象转换为 JSON 对象,反之亦然。基本上只有 2 个类:JSONEncoderJSONDecoder:第一个将 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 字典

于 2012-11-23T14:41:33.697 回答
0

该库的版本0.28.0和更高版本使用一个类来解析表或查询中的行。google-cloud-bigqueryRow

例如打印出带有模式的查询的结果

[
   {
        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 月 4 日尚未发布)中,将有用于keys()values()items()get()的方法,就像内置字典对象一样。(在PR #4393中添加)因此,要将行转换为类似 JSON 的字典0.29.0

query = client.query('...')
rows = query.result()
for row in rows:
    row_json = dict(row.items())
于 2017-12-04T21:19:32.227 回答