Сгруппировать объект JSON с использованием ключа в Python

У меня есть данные 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?

Нет такой функции, которая работала бы так, как вы ожидаете. Вам нужно разделить этот json и сделать так, как вы хотите, используя цикл for.

Sachin Raghav 16.10.2018 06:43

Спасибо. Да, я могу добиться этого, «BLE»: [{«type1»: «reference», «mac1»: «aa: dd: dd: dd: dd» «type2»: «environment», «mac2» : "12: дд: сс: аа: сс"}]

anu010291 16.10.2018 07:10

как вы читаете данные JSON из файла или строки? он уже хранится в переменной, если да, то это ее тип данных dict?

chickity china chinese chicken 16.10.2018 07:40

@davedwards данные хранятся в переменной, и да, тип данных dict

anu010291 16.10.2018 08:02
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
4
1 179
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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}    


Now you have a new 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

Надеюсь это поможет. Если это не так, как вы хотели, оставьте комментарий и постараюсь улучшить.

Большое вам спасибо .. проверим код и свяжемся с вами.

anu010291 17.10.2018 07:24

Другие вопросы по теме