Jolt配置需求:将DataSetWriterId作为动态键并添加计数器
需求说明
从给定的JSON数据中提取DataSetWriterId的前缀部分,为Payload.Data数组内的每个Body值生成带两位递增计数器后缀的键,最终输出指定结构的JSON。
输入JSON示例
{ "MessageType": "ua-data", "PublisherId": "1", "Messages": [ { "DataSetWriterId": "key_07", "SequenceNumber": 2, "Payload": { "Data": [ { "Type": 1, "Body": false }, { "Type": 1, "Body": false }, { "Type": 1, "Body": false } ] } } ] }
期望输出JSON示例
{ "key_01": false, "key_02": false, "key_03": false }
实现方案(以JavaScript为例)
步骤概述
- 解析输入JSON为JavaScript对象
- 提取
DataSetWriterId的前缀(如key_) - 遍历
Payload.Data数组,为每个元素生成带递增两位计数器的键,对应值为Body字段的值 - 将生成的键值对转为格式化的JSON字符串
代码实现
// 输入JSON字符串 const inputJson = `{ "MessageType": "ua-data", "PublisherId": "1", "Messages": [ { "DataSetWriterId": "key_07", "SequenceNumber": 2, "Payload": { "Data": [ { "Type": 1, "Body": false }, { "Type": 1, "Body": false }, { "Type": 1, "Body": false } ] } } ] }`; // 解析为对象 const inputObj = JSON.parse(inputJson); // 提取键前缀 const dataSetId = inputObj.Messages[0].DataSetWriterId; const keyPrefix = `${dataSetId.split('_')[0]}_`; // 构建结果对象 const result = {}; inputObj.Messages[0].Payload.Data.forEach((item, idx) => { const counter = String(idx + 1).padStart(2, '0'); result[`${keyPrefix}${counter}`] = item.Body; }); // 输出格式化后的JSON const outputJson = JSON.stringify(result, null, 2); console.log(outputJson);
运行上述代码后,控制台将输出符合要求的JSON结果。
内容的提问来源于stack exchange,提问作者Hagakure87
相关产品推荐
相关产品推荐

