如何使用JSONata将列名与对应值组合成键值对数组?
JSON结构转换:列别名映射行数据
原始输入
{ "totalRows": 10, "columns": [ { "alias": "Active", "id": "[COLUMN_ACTIVE]" }, { "alias": "Area", "id": "[COLUMN_AREA]" } ], "rows": [ { "columnValues": [ false, "A" ] }, { "columnValues": [ false, "B" ] }, { "columnValues": [ true, "C" ] } ] }
期望输出
[ { "Active": false, "Area": "A" }, { "Active": false, "Area": "B" }, { "Active": true, "Area": "C" } ]
解决方案
JavaScript 实现
先提取列别名列表,再遍历每行数据,将索引对应的别名作为键、对应值作为属性值,组装成目标对象:
const inputData = { "totalRows": 10, "columns": [ {"alias": "Active", "id": "[COLUMN_ACTIVE]"}, {"alias": "Area", "id": "[COLUMN_AREA]"} ], "rows": [ {"columnValues": [false, "A"]}, {"columnValues": [false, "B"]}, {"columnValues": [true, "C"]} ] }; // 获取列别名数组 const columnAliases = inputData.columns.map(col => col.alias); // 转换行数据 const result = inputData.rows.map(row => { const rowObj = {}; row.columnValues.forEach((value, index) => { rowObj[columnAliases[index]] = value; }); return rowObj; }); console.log(JSON.stringify(result, null, 2));
Python 实现
通过列表推导式提取列别名,再遍历每行数据完成键值映射:
import json input_data = { "totalRows": 10, "columns": [ {"alias": "Active", "id": "[COLUMN_ACTIVE]"}, {"alias": "Area", "id": "[COLUMN_AREA]"} ], "rows": [ {"columnValues": [False, "A"]}, {"columnValues": [False, "B"]}, {"columnValues": [True, "C"]} ] } # 提取列别名 column_aliases = [col["alias"] for col in input_data["columns"]] # 转换数据结构 result = [] for row in input_data["rows"]: row_obj = {} for idx, value in enumerate(row["columnValues"]): row_obj[column_aliases[idx]] = value result.append(row_obj) print(json.dumps(result, indent=2))
内容的提问来源于stack exchange,提问作者L Szij
相关产品推荐
相关产品推荐

