Python 转换JSON文件以降低级别
我收到一个带有测试结果的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
[{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"
}