Análisis de datos para crear un objeto de datos json con Python

Aquí están mis datos de google bigquery para analizar:

{ 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' } ] } } 

Al ser un nuevo abonado de Python, realmente no tengo idea de cómo analizar estos datos para crear un objeto json como el siguiente:

 [ {'count': 200, 'year': 2008}, {'count': 240, 'year': 2010}, {'count': 290, 'year': 2009} ] 

¿Alguien puede darme alguna pista sobre cómo empezar?

Ejemplo

 [{u'v': u'the'}, {u'v': u'995'}, {u'v': u'1600'}] 

En esto para la palabra 'the' , el count es 995 y el year es 1600. Y así sigue.

Si ‘Z’ es su gran diccionario, en ‘respuesta’ obtendrá la estructura que necesita.

 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) 

En respuesta obtendrá lo siguiente:

 [{'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'}] 

Creo que es lo que necesitas. Que solo use json y haga un json.dumps a la respuesta y eso es todo.

Puede convertir fácilmente objetos de python en objetos JSON y viceversa usando el módulo json. Fundamentalmente, solo hay 2 clases: JSONEncoder y JSONDecoder : la primera convierte las colecciones de python en cadenas JSON, la segunda una cadena de JSON en un objeto Python.

Ejemplos:

 from json import JSONEncoder jsonString = JSONEncoder().encode({ "count": 222, "year": 2012 }) 

el código anterior generará una cadena JSON de un diccionario de Python

 from json import JSONDecoder pyDictionary = JSONDecoder().decode('{"count": 222, "year": 2012}') 

el código anterior generará un diccionario de python a partir de una cadena JSON

La versión 0.28.0 y posterior de la biblioteca google-cloud-bigquery usa una clase Row para analizar filas de una tabla o consulta.

Por ejemplo, para imprimir los resultados de una consulta con un esquema

 [ { 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' }, ] 

como en tu ejemplo, uno podría hacer

 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)) 

En la versión 0.29.0 (aún no publicada a partir del 2017-12-04), habrá métodos para las keys() , values() , items() y get() , al igual que un objeto de diccionario incorporado. (Agregado en PR # 4393 ) Entonces, para convertir filas a un diccionario similar a JSON en 0.29.0 :

 query = client.query('...') rows = query.result() for row in rows: row_json = dict(row.items())