如何解析带有值的JSON到" key"作为'dict`对象?

时间:2017-04-04 22:22:52

标签: python json python-2.7 python-3.x

我遇到了一个障碍,我认为这可能很容易解决,但几个小时后我就无法弄明白。

我的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:[{}]}

我无法弄清楚如何克服嵌套的下一个键。如果我能提供更多信息,请告诉我。谢谢。

2 个答案:

答案 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]