如何编写Jolt Spec实现指定JSON到键值对格式JSON的转换?
Jolt转换规则实现方案
输入JSON
{ "Date": "6/3/2023 17:38", "Volt": 7, "WS1": 0, "WS2": 0, "HR1": 32.65, "T1": 20.35, "PY1": 7, "R1": 0 }
目标输出JSON
{ "Date": "2023-03-06 17:38:", "data": [ { "code": "Volt", "value": "7.0" }, { "code": "WS1", "value": "0.0" }, { "code": "WS2", "value": "0.0" }, { "code": "HR1", "value": "32.65" }, { "code": "T1", "value": "20.35" }, { "code": "PY1", "value": "7.0" }, { "code": "R1", "value": "0.0" } ] }
实现转换的Jolt Spec
[ { "operation": "modify-overwrite-beta", "spec": { "Date": "=formatDate('yyyy-MM-dd HH:mm:', 'M/d/yyyy HH:mm')", "Volt": "=toString(@(1,Volt))", "WS1": "=toString(@(1,WS1))", "WS2": "=toString(@(1,WS2))", "HR1": "=toString(@(1,HR1))", "T1": "=toString(@(1,T1))", "PY1": "=toString(@(1,PY1))", "R1": "=toString(@(1,R1))" } }, { "operation": "shift", "spec": { "Date": "Date", "*": { "$": "data[#2].code", "@": "data[#2].value" } } }, { "operation": "modify-overwrite-beta", "spec": { "data": { "*": { "value": "=concat(@(1,value), @(1,value) =~ '^\\d+$' ? '.0' : '')" } } } } ]
规则说明
- 第一步(modify-overwrite-beta):完成日期格式转换,把
M/d/yyyy HH:mm格式转为yyyy-MM-dd HH:mm:;同时将所有数值字段转为字符串类型。 - 第二步(shift):保留原
Date字段,将其余所有字段映射到data数组中,每个字段对应一个对象——用字段名作为code,字段值作为value。 - 第三步(modify-overwrite-beta):补全
data数组中value的格式,如果是纯整数形式的字符串(比如"7"),自动补为"7.0",小数形式则保持原样。
内容的提问来源于stack exchange,提问作者BHADRAKA HERATH
相关产品推荐
相关产品推荐

