Преобразование вложенного JSON в структуру простого словаря JSON - PullRequest
0 голосов
/ 05 августа 2020

Я вызываю API, который возвращает мне данные в таком формате:

{
  "records": [
    {
      "columns": [
        {
          "fieldNameOrPath": "Name",
          "value": "Burlington Textiles Weaving Plant Generator"
        },
        {
          "fieldNameOrPath": "AccountName",
          "value": "Burlington Textiles Corp of America"
        }
      ]
    },
    {
      "columns": [
        {
          "fieldNameOrPath": "Name",
          "value": "Dickenson Mobile Generators"
        },
        {
          "fieldNameOrPath": "AccountName",
          "value": "Dickenson plc"
        }
      ]
    }
  ]
}

, чтобы правильно использовать эти данные для моего следующего рабочего процесса, мне нужна такая структура, как:

{
  "records": [
    {
      "Name": "Burlington Textiles Weaving Plant Generator",
      "AccountName": "Burlington Textiles Corp of America"
    },
    {
      "Name": "Dickenson Mobile Generators",
      "AccountName": "Dickenson plc"
    }
  ]
}

Значит, значение fieldNameOrPath должно стать ключом, а значение value - значением.

Может ли это преобразование быть выполнено с помощью функции python?

Применяются эти условия:

  • Я не знаю, сколько объектов будет внутри каждого columns элемента списка
  • Имена ключей и значений могут быть разными (так что мне нужно передать fieldNameOrPath в качестве ключа для ключа и value в качестве ключа для значения функции, чтобы указать их)

Ответы [ 2 ]

2 голосов
/ 05 августа 2020

Предположим, данные из API хранятся в переменной data. Чтобы преобразовать данные в предложенный вами формат, мы можем перебрать все записи и для каждой записи создать словарь, перебирая его столбцы, используя значения fieldNameOrPath в качестве ключей и значения value в качестве значения словаря.

trans_data = {"records": []}

for record in data["records"]:
    trans_record = {}
    for column in record["columns"]:
        trans_record[column["fieldNameOrPath"]] = column["value"]

    trans_data["records"].append(trans_record)
0 голосов
/ 05 августа 2020

Это определенно можно сделать в python, я бы попробовал что-то вроде следующего, если у вас есть это как dict.

Вы можете go из json диктовать с json. загружает (your_ json) и наоборот с помощью json .dumps (your_dict)

new_dict = {'records': []}
for record in old_dict['records']:
    for column in record['columns']:
        new_dict['records'].append(
            {
             column['fieldNameOrPath']: column['value']
            }

Я почти уверен, что это именно то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...