首页 > 解决方案 > 改成新的json

问题描述

所有,我正在尝试将 JSON 数据从 airtable 转换为新 JSON 中的不同形式,但是我被卡住了。这是我从 airtable 得到的 JSON:

dataset = {"records": [{"id": "recVqe2l15WKanDS1", "fields": {"confirm": "2", "state": "MA\n", "time": "2019-01-01", "predict": "2"}, "createdTime": "2020-09-19T01:53:47.000Z"}, 
{"id": "rechRMD3sKzsweZO8", "fields": {"confirm": "1", "state": "MA\n", "time": "2019-01-01", "predict": "1"}, "createdTime": "2020-09-19T01:53:47.000Z"}, 
{"id": "recnO0uTnz3LmJNGF", "fields": {"confirm": "3", "state": "MA\n", "time": "2019-01-01", "predict": "3"}, "createdTime": "2020-09-19T01:53:47.000Z"}]}

我唯一需要的是每个中的信息"fields" "state". 所以它看起来像:

{
    MA:[{"confirm": "2", "time": "2019-01-01", "predict": "2"},
    {"confirm": "1", "time": "2019-01-01", "predict": "1"},
    {"confirm": "3",  "time": "2019-01-01", "predict": "3"}
    ....(there could be more state data like this)
}

在这种情况下,我首先state:MA\n从原始数据中删除了 并用冒号将其移动到前面。这是我到目前为止尝试过的

records = dataset['records']
for i in records:
    fields = i['fields']
    state = i['fields'].get('state')
    
print(state)

输出将如下所示:

MA
MA
MA

我能够得到这样的字段数据:

records = dataset['records']
for i in records:
    fields = i['fields']
    print(fields)

看起来像这样:

{'confirm': '2', 'state': 'MA\n', 'time': '2019-01-01', 'predict': '2'}
{'confirm': '1', 'state': 'MA\n', 'time': '2019-01-01', 'predict': '1'}
{'confirm': '3', 'state': 'MA\n', 'time': '2019-01-01', 'predict': '3'}

我只是想知道如何改革它们,使其看起来像我想要的数据。(通过使用 python)非常感谢您的帮助!对此,我真的非常感激。

标签: pythonarraysjson

解决方案


dict您可以在迭代时使用所需的数据构建dataset

results = {}

for record in dataset["records"]:
    # extract and remove state
    state = record["fields"].pop("state").strip()

    if not state in results: # new state found
        results[state] = []

    # append data to corresponding state
    results[state].append(record["fields"])

当我们使用 a 时,可以做得更短一点defaultdict

from collections import defaultdict

results = defaultdict(list)

for record in dataset["records"]:
    results[record["fields"].pop("state").strip()].append(record["fields"])

输出:

{'MA': [{'confirm': '2', 'time': '2019-01-01', 'predict': '2'},
  {'confirm': '1', 'time': '2019-01-01', 'predict': '1'},
  {'confirm': '3', 'time': '2019-01-01', 'predict': '3'}]}

推荐阅读