【问题标题】:Flatten JSON based on an attribute - python基于属性展平 JSON - python
【发布时间】:2018-02-11 02:35:30
【问题描述】:

我有一个这样的 json 数组:

[
    {
        'id': 1,
        'values': [
            {
                'cat_key': 'ck1'
            },
            {
                'cat_key': 'ck2'
            }
        ]
    },
    {
        'id': 2,
        'values': [
            {
                'cat_key': ck3
            }
        ]
    }
]

我想在values 字段上展平这个数组,这样:

[
    {
        'id': 1,
        'cat_key': 'ck1'
    },
    {
        'id': 1,
        'cat_key': 'ck2'
    },
    {
        'id': 2,
        'cat_key': 'ck3'
    }
]

在 python 中最有效的方法是什么?

【问题讨论】:

    标签: python arrays json serialization json-deserialization


    【解决方案1】:

    您的 JSON 在技术上无效,但假设它是有效的并且可以作为 list 迭代:

    out = []
    for d in your_json:
        for v in d.get('values', []):
            out.append({'id': d['id'], 'cat_key': v['cat_key']})
    print json.dumps(out)
    

    结果:

    [{"id": 1, "cat_key": "ck1"}, {"id": 1, "cat_key": "ck2"}, {"id": 2, "cat_key": "ck3"}]
    

    【讨论】:

      【解决方案2】:
      obj = json.loads(json_array)
      new_obj = [] 
      for d in obj:
          if d.get('values'):
              for value in d['values']:
                  new_obj.append(dict(id=d['id'],cat_key=value['cat_key']))
      new_json = json.dumps(new_obj)
      

      【讨论】:

        猜你喜欢
        • 2022-11-07
        • 2020-05-03
        • 1970-01-01
        • 2021-08-17
        • 1970-01-01
        • 2019-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多