我遇到了一个障碍,我认为这可能很容易解决,但几个小时后我就无法弄明白。
我的JSON看起来像这样:
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'}}, ...
我可以使用这样的代码访问我需要的变量,没问题:
datasets = list_datasets_in_project.get('datasets',[])
for dataset in datasets:
dataset['datasetReference']['datasetId']
但是接下来是问题,我还有另一组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'}]}}
由于某种原因,我不能使用相同的逻辑:
schemas = get_table_schema_result.get('schema',[])
for schema in schemas:
schema['fields']['type']
据我所知,不同之处在于顶级JSON看起来像:
datasets:[{}]
,底部看起来像:
schema:{fields:[{}]}
我无法弄清楚如何克服嵌套的下一个键。如果我能提供更多信息,请告诉我。谢谢。
答案 0 :(得分: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']
将产生结果:
u'INTEGER'
u'STRING'
u'STRING'
u'TIMESTAMP'
u'INTEGER'
答案 1 :(得分:0)
根据您尝试实施的功能,您有两种选择。
反对意见1:
您只在一个元素内迭代数组"字段"来自你的字典
for field in schemas['fields']:
field['type']
选项2:
迭代模式字典中的每个键并迭代每个元素中的数组
for key in schemas:
field=schemas[key]