【问题标题】:Group JSON object using key in python使用python中的键对JSON对象进行分组
【发布时间】:2019-03-20 13:06:07
【问题描述】:

我有下面给出的 JSON 数据,

{
  "BLE:ble_type1": "xx",
  "BLE:ble_mac1": "yy",
  "BLE:ble_type2": "aa",
  "BLE:ble_mac2": "bb"
}

预期的输出是,

"BLE":[  
        {  
          "ble_type1":"xx",
          "ble_mac1":"yy"
        },
        {  
          "ble_type2":"aa",
          "ble_mac2":"bb"
        }
      ]

有人可以帮助我使用 python 获得所需的输出吗?

【问题讨论】:

  • 没有像您期望的那样工作的功能。您需要使用 for 循环拆分此 json 并根据需要制作。
  • 谢谢。是的,我能够做到这一点,“BLE”:[ {“type1”:“reference”,“mac1”:“aa:dd:dd:dd:dd”“type2” :"环境", "mac2":"12:dd:ss:aa:ss" } ]
  • 您如何从文件或字符串中读取 JSON 数据?它是否已经存储在变量中,如果是,它的数据类型是dict
  • @davedwards 数据存储在一个变量中,是的,数据类型是 dict

标签: arrays json python-3.x iteration key-value


【解决方案1】:

这是一个起点,适用于给出的示例。可能需要针对其他 JSON 输入数据进行调整:

from collections import OrderedDict

d = {
  "BLE:ble_type1": "xx",
  "BLE:ble_mac1": "yy",
  "BLE:ble_type2": "aa",
  "BLE:ble_mac2": "bb"
}

od = OrderedDict(d.items())

mainkey = set([k.split(':')[0] for k in list(d.keys())]).pop()

keys = [k.split(':')[1] for k in od.keys()]
values = list(od.values())
print(keys)
data = []

count = int(keys[0][-1])

d = {}

for k, v in zip(keys, values):
  n = int(k[-1])

  if n == count:
    d[k] = v

  else:
    d = {}
    count += 1 
    if n == count:
      d[k] = v

  if d not in data:
    data.append(d)

new_d = {mainkey: data}    


现在您有了一个新的dict,其中包含所需的输出:
>>> print(new_d)

{'BLE': [{'ble_type1': 'xx', 'ble_mac1': 'yy'}, {'ble_type2': 'aa', 'ble_mac2': 'bb'}]}

我们可以验证这是否匹配所需的输出:

>>> desired = [  
        {  
          "ble_type1":"xx",
          "ble_mac1":"yy"
        },
        {  
          "ble_type2":"aa",
          "ble_mac2":"bb"
        }
      ]

>>> print(new_d['BLE'] == desired)
True

希望这会有所帮助。如果不是您想要的,请发表评论,并会努力改进。

【讨论】:

  • 非常感谢..将检查代码并回复您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 2017-09-25
  • 2018-02-25
  • 2018-11-23
相关资源
最近更新 更多