Je rencontre un problème qui, à mon avis, pourrait être une solution facile, mais je ne peux pas le comprendre après quelques heures.

J'ai JSON qui ressemble à ceci:

u'datasets': [{u'kind': u'bigquery#dataset', u'id': u'project-number-1:dataset_number_1', u'datasetReference': {u'projectId': u'project-number-1', u'datasetId': u'dataset_number_1'}}, ...

Je peux accéder aux variables dont j'ai besoin avec un code comme celui-ci, pas de problème:

datasets = list_datasets_in_project.get('datasets',[])

for dataset in datasets:
    dataset['datasetReference']['datasetId']

Mais voici le problème , j'ai un autre ensemble de JSON au format:

u'schema': {u'fields': [{u'type': u'INTEGER', u'name': u'app_id', u'mode': u'NULLABLE'}, {u'type': u'STRING', u'name': u'error', u'mode': u'NULLABLE'}, {u'type': u'STRING', u'name': u'page', u'mode': u'NULLABLE'}, {u'type': u'TIMESTAMP', u'name': u'end_date', u'mode': u'NULLABLE'}, {u'type': u'INTEGER', u'name': u'log_count', u'mode': u'REQUIRED'}]}}

Et pour une raison quelconque, je ne peux pas utiliser la même logique comme:

schemas = get_table_schema_result.get('schema',[])

for schema in schemas:
    schema['fields']['type']

D'après ce que je peux dire, la différence est que le top JSON ressemble à:

datasets:[{}]

Et le fond ressemble à:

schema:{fields:[{}]}

Je ne peux pas comprendre comment surmonter la prochaine clé imbriquée. Veuillez me faire savoir si je peux fournir plus d'informations. Je vous remercie.

0
user3282173 5 avril 2017 à 01:22

2 réponses

Meilleure réponse

Dans votre premier JSON, la clé 'datasets' contient la valeur de la liste tandis que celle avec la clé 'schema' contient la valeur dict. Pour récupérer la valeur dont vous avez besoin, vous devez l'itérer comme suit:

schemas = get_table_schema_result.get('schema', {})
#               default value returned as dict  ^
#               if schema key is not present

#      to return empty list if 
#      `fields` key is not present  v
for schema in schemas.get('fields', []):
    schema['type']

Ce qui donnera le résultat comme:

u'INTEGER'
u'STRING'
u'STRING'
u'TIMESTAMP'
u'INTEGER'
0
Anonymous 4 avril 2017 à 22:27

Vous avez deux options en fonction de la fonctionnalité que vous essayez d'implémenter.

Option 1:

Vous parcourez le tableau dans un seul élément "champ" de votre dictionnaire

for field in schemas['fields']:
  field['type']

Option 2:

Vous itérez pour chaque clé dans le dictionnaire de schémas et itérez le tableau dans chaque élément

for key in schemas:
  field=schemas[key]
0
alpeshpandya 4 avril 2017 à 22:37