2017-04-04 9 views
0

私は簡単な解決策かもしれないと思うが、数時間後には分かりません。"dict"オブジェクトとして "キー"に値を持つJSONを解析する方法は?

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

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

しかし、相続問題、私は持っていません:

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'}}, ... 

私はこのようなコードで必要な変数、何の問題にアクセスすることができます。

私はこのようになりますJSONを持っています

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

のような形式の別のJSONセット

datasets:[{}] 

と底は次のようになります:

schema:{fields:[{}]} 
私は差がトップJSONのように見えるということです伝えることができるものから

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

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

:私はのように同じロジックを使用することはできません何らかの理由

入れ子になっている次のキーを乗り越える方法がわかりません。私が提供できる情報があれば教えてください。ありがとうございました。

+0

'schema'は' dict() 'のキーで、' datasets'はキーtですあなたが自分のgetメソッドが他の型のオブジェクトを引き出そうとしている場合は、自分自身のgetから始まる 'list()'を返します。 –

答えて

0

最初のJSONでは'datasets'キーにリスト値が保持され、'schema'キーにはdictの値が保持されます。あなたが必要とする値を取得するためには、あなたはそれが好きで反復処理する必要があります。

として結果が得られます
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'] 

:あなたはあなたがしようとしている機能が何であるかに応じて、2つのオプションがあり

u'INTEGER' 
u'STRING' 
u'STRING' 
u'TIMESTAMP' 
u'INTEGER' 
+0

すごく速くて、それは完璧に機能します。迅速な対応に感謝します。 5分後に私の答えを受け入れます。 – user3282173

0

実装する。

Opption 1:

あなたの辞書

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

オプション2から一つだけの要素「フィールド」内の反復配列:あなたは、スキーマの辞書と内反復配列の各キーに対して反復

各要素

for key in schemas: 
    field=schemas[key] 
関連する問題