Python 转换JSON文件以降低级别

Python 转换JSON文件以降低级别,python,json,transformation,transpose,Python,Json,Transformation,Transpose,我收到一个带有测试结果的JSON文件。数据层次结构是:[{date,[test->{time,result}]}]我们需要转换成更“可用”的东西,比如{date&time,(test:result)} 我们正在使用以下代码: import json with open('test_result.json', 'r') as f: main_struct = json.load(f) transformed = {} main_date = main_struct.get('date

我收到一个带有测试结果的JSON文件。数据层次结构是:
[{date,[test->{time,result}]}]
我们需要转换成更“可用”的东西,比如
{date&time,(test:result)}

我们正在使用以下代码:

import json

with open('test_result.json', 'r') as f:
    main_struct = json.load(f)

transformed = {}

main_date = main_struct.get('date')

for main_key, main_value in main_struct.items():
    if isinstance(main_value, list):
        for inner_key in main_value:
            transform_key = main_date + 'T' + inner_key.get('time')
            if transform_key not in transformed:
                transformed[transform_key] = {}
            for innest_key, innest_value in inner_key.items():
                if innest_key == 'value':
                    transfom_inner_key = main_key
                else:
                    transfom_inner_key = main_key + "." + innest_key
                if innest_key != 'time':
                    transformed[transform_key][transfom_inner_key] = innest_value
    else:
        transformed[main_key] = main_value

with open('transform.json', 'w') as outfile:
    json.dump(transformed, outfile, sort_keys=True, indent=4)
虽然代码正在运行,但我对可读性有一些担心,可能存在一些库可以帮助降低代码复杂性

这是JSON输入文件的内容:

   [
    {
       "date": "2019-05-19",
       "test1": [
           { "time": "14:00:00", "value": 10 },
           { "time": "15:00:00", "value": 12 },
           { "time": "17:00:00", "value": 16 }
        ],
       "test2": [
           { "time": "14:00:00", "value": 11 },
           { "time": "16:00:00", "value": 15 },
           { "time": "17:00:00", "value": 17 }
        ],
       "test3": [
           { "time": "15:00:00", "value": "B", "additionalInfo": "Additional information at 15h" },
           { "time": "16:00:00", "value": "C" },
           { "time": "17:00:00", "value": "D", "additionalInfo": "Additional information at 17h" }
        ],
        "generated_by": "author of tests"
    }
]
这是预期的结果:

{
    "2019-05-19T14:00:00": {
        "test1": 10,
        "test2": 11
    },
    "2019-05-19T15:00:00": {
        "test1": 12,
        "test3": "B",
        "test3.additionalInfo": "Additional information at 15h"
    },
    "2019-05-19T16:00:00": {
        "test2": 15,
        "test3": "C"
    },
    "2019-05-19T17:00:00": {
        "test1": 16,
        "test2": 17,
        "test3": "D",
        "test3.additionalInfo": "Additional information at 17h"
    },
    "date": "2019-05-19",
    "generated_by": "author of tests"
}
印刷品:

{
    "2019-05-19T14:00:00": {
        "test1": 10,
        "test2": 11
    },
    "2019-05-19T15:00:00": {
        "test1": 12,
        "test3": "B",
        "test3.additionalInfo": "Additional information at 15h"
    },
    "2019-05-19T17:00:00": {
        "test1": 16,
        "test2": 17,
        "test3": "D",
        "test3.additionalInfo": "Additional information at 17h"
    },
    "2019-05-19T16:00:00": {
        "test2": 15,
        "test3": "C"
    },
    "date": "2019-05-19",
    "generated_by": "author of tests"
}

我喜欢你这样做,我会用那种方式测试代码,但test实际上不是测试的前缀。。。。它可以是每个特定测试的名称,如“温度”、“湿度”或“阵风”。我的代码是通用的,与特定的标签/项目、项目数量等无关。结构是唯一不变的<代码>[{date,[test_name->{time,result,additional_fields}]}]@outon更新了我的答案。
{
    "2019-05-19T14:00:00": {
        "test1": 10,
        "test2": 11
    },
    "2019-05-19T15:00:00": {
        "test1": 12,
        "test3": "B",
        "test3.additionalInfo": "Additional information at 15h"
    },
    "2019-05-19T17:00:00": {
        "test1": 16,
        "test2": 17,
        "test3": "D",
        "test3.additionalInfo": "Additional information at 17h"
    },
    "2019-05-19T16:00:00": {
        "test2": 15,
        "test3": "C"
    },
    "date": "2019-05-19",
    "generated_by": "author of tests"
}