У меня есть данные 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?
Спасибо. Да, я могу добиться этого, «BLE»: [{«type1»: «reference», «mac1»: «aa: dd: dd: dd: dd» «type2»: «environment», «mac2» : "12: дд: сс: аа: сс"}]
как вы читаете данные JSON из файла или строки? он уже хранится в переменной, если да, то это ее тип данных dict?
@davedwards данные хранятся в переменной, и да, тип данных dict



Вот отправная точка, работает для приведенного примера. Вероятно, потребуется настроить другие входные данные 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 that contains the desired output:
>>> 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
Надеюсь это поможет. Если это не так, как вы хотели, оставьте комментарий и постараюсь улучшить.
Большое вам спасибо .. проверим код и свяжемся с вами.
Нет такой функции, которая работала бы так, как вы ожидаете. Вам нужно разделить этот json и сделать так, как вы хотите, используя цикл for.