如何在Jolt中提取对象键并生成$original初始化对象
给指定层级JSON对象添加
$original属性的实现方案 需求说明
需要在输入JSON的指定层级对象中,新增一个名为$original的属性:
$original是一个对象,包含当前层级的所有原对象键- 每个键对应的值初始化为空对象
{}
输入示例
{ "PartyStatus": { "item": [ { "RleStsVal": { "prtyRleStsVal": "0001", "prtyRleStsTyp": "Active" }, "PrtyRleStgCd": { "PrtyRleStgTp": "0002", "PrtyRleStgDesc": "Prospect" } } ] } }
预期输出示例
{ "PartyStatus": { "item": [ { "RleStsVal": { "prtyRleStsVal": "0001", "prtyRleStsTyp": "Active" }, "RleStgCd": { "PrtyRleStgTp": "0002", "PrtyRleStgDesc": "Prospect" }, "$original": { "RleStgCd": {}, "RleStsVal": {} } } ] } }
实现思路(以JavaScript为例)
- 定位目标层级:先找到需要处理的指定层级对象(示例中为
PartyStatus.item[0]) - 可选:键名修改:如果需要调整原对象的键名(如示例中
PrtyRleStgCd改为RleStgCd),先完成键名映射与替换 - 生成
$original对象:遍历目标对象的所有键,为每个键创建空对象值,组合成$original - 添加
$original到目标对象:将生成的$original属性挂载到目标对象上
代码实现
// 输入JSON数据 const input = { "PartyStatus": { "item": [ { "RleStsVal": { "prtyRleStsVal": "0001", "prtyRleStsTyp": "Active" }, "PrtyRleStgCd": { "PrtyRleStgTp": "0002", "PrtyRleStgDesc": "Prospect" } } ] } }; // 1. 定位到指定层级的目标对象 const targetObj = input.PartyStatus.item[0]; // 2. 处理键名修改(根据需求可选) const keyMapping = { "PrtyRleStgCd": "RleStgCd" }; Object.keys(keyMapping).forEach(oldKey => { if (targetObj.hasOwnProperty(oldKey)) { targetObj[keyMapping[oldKey]] = targetObj[oldKey]; delete targetObj[oldKey]; } }); // 3. 生成$original对象 const original = {}; Object.keys(targetObj).forEach(key => { original[key] = {}; }); // 4. 将$original添加到目标对象 targetObj.$original = original; // 打印结果 console.log(JSON.stringify(input, null, 2));
注意事项
- 如果不需要修改键名,直接删除代码中键名映射的部分即可
- 若指定层级是动态路径(如不确定数组索引或嵌套深度),可以通过递归遍历或路径解析函数来定位目标对象
内容的提问来源于stack exchange,提问作者Madhavi kurabalakota
相关产品推荐
相关产品推荐

