使用JOLT将JSON大写键转换为驼峰命名格式
使用JOLT将大写JSON键转换为驼峰命名格式
需求:从数据库获取的JSON数据中所有键均为大写格式,需要通过JOLT转换操作将这些键转换为驼峰命名格式,且输入的JSON键值对不固定,会随场景变化。
输入JSON
[ { "LAST_UPDT_TS": "2018-05-21 07:52:06.0", "RTRV_TS": "2023-02-08 06:03:03.932108", "DOC_ID": "1-102GJ8CY", "PARENT_ASSET_DOC_ID": null, "ASSET_STATUS": "Inactive", "CAGE_NUM": "SUBZ6G" }, { "LAST_UPDT_TS": "2020-09-09 22:28:25.0", "RTRV_TS": "2023-02-08 06:03:03.932108", "DOC_ID": "1-102MDPE7", "PARENT_ASSET_DOC_ID": null, "ASSET_STATUS": "Active", "CAGE_NUM": "012210" } ]
预期输出
[ { "lastUpdtTs": "2018-05-21 07:52:06.0", "rtrvTs": "2023-02-08 06:03:03.932108", "docId": "1-102GJ8CY", "ParentAssetDocId": null, "AssetStatus": "Inactive", "CageNum": "SUBZ6G" }, { "lastUpdtTs": "2020-09-09 22:28:25.0", "retrieveTimestamp": "2023-02-08 06:03:03.932108", "docId": "1-102MDPE7", "ParentAssetDocId": null, "AssetStatus": "Active", "CageNum": "012210" } ]
JOLT转换规范
针对需求中既有通用驼峰转换,又有个别键特殊映射、部分键为大驼峰的情况,可使用以下JOLT规范:
[ { "operation": "shift", "spec": { "*": { // 处理特殊键的自定义映射 "RTRV_TS": { "@(2,RTRV_TS)": "[&3].retrieveTimestamp" }, // 通用大写转小驼峰的基础转换:先转全小写,再替换下划线为空格,最后将空格后单词首字母大写并去空格 "*": { "$": "[&3].&(0,lowerCase)", "@": "[&3].&(0,lowerCase)" }, "*_*": { "$": "[&3].&(0,replaceAll,_,(?<=[a-zA-Z])\\u0020)", "@": "[&3].&(0,replaceAll,_,(?<=[a-zA-Z])\\u0020)" }, "*_*_*": { "$": "[&3].&(0,replaceAll,_,(?<=[a-zA-Z])\\u0020)", "@": "[&3].&(0,replaceAll,_,(?<=[a-zA-Z])\\u0020)" }, "*_*_*_*": { "$": "[&3].&(0,replaceAll,_,(?<=[a-zA-Z])\\u0020)", "@": "[&3].&(0,replaceAll,_,(?<=[a-zA-Z])\\u0020)" }, "* *": { "$": "[&3].&(0,capitalize)", "@": "[&3].&(0,capitalize)" }, "* * *": { "$": "[&3].&(0,capitalize)", "@": "[&3].&(0,capitalize)" }, "* * * *": { "$": "[&3].&(0,capitalize)", "@": "[&3].&(0,capitalize)" } } } }, { "operation": "modify-overwrite-beta", "spec": { "*": { // 将小驼峰键映射为大驼峰键 "ParentAssetDocId": "@(1.parentAssetDocId)", "AssetStatus": "@(1.assetStatus)", "CageNum": "@(1.cageNum)", // 保留部分键的小驼峰格式 "rtrvTs": "@(1.rtrvTs)" } } }, { "operation": "remove", "spec": { "*": { // 删除临时生成的小驼峰中间键 "parentAssetDocId": "", "assetStatus": "", "cageNum": "" } } } ]
转换说明
- Shift阶段:
- 优先处理特殊键的自定义映射,比如
RTRV_TS直接映射为retrieveTimestamp; - 对所有通用键执行:大写转小写 → 下划线替换为空格 → 空格后单词首字母大写并移除空格,生成小驼峰格式的键。
- 优先处理特殊键的自定义映射,比如
- Modify阶段:
- 将需要大驼峰格式的键从小驼峰的临时键映射过来,保留对应值。
- Remove阶段:
- 清理临时生成的小驼峰键,确保输出结构符合预期。
如果不需要大驼峰或特殊键映射,可简化Shift操作中的规则,只保留通用小驼峰转换逻辑即可。
内容的提问来源于stack exchange,提问作者Prasad S Deshpande
相关产品推荐
相关产品推荐

