英文:
Converting the key variable Case to Camel Case using Jolt
问题
以下是您提供的内容的翻译:
输入的 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"
}
]
英文:
I am getting data from the database sources in the following format with capital keys.
I want to convert keys in camel case using the JOLT
transformation.
json which I may be getting does not contains fixed key value pairs. Key can vary case-to-case basis
input 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"
}
]
Expected output
[
{
"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"
}
]
答案1
得分: 2
你可以使用以下规范
[// 为了给将不会消失的属性的空值指定默认值“null”而准备下一个规范
{
"operation": "default",
"spec": {
"*": {
"*": "null"
}
}
},
{// 交换键值对
"operation": "shift",
"spec": {
"*": {
"*": {
"$": "&2.&1.@(0)"
}
}
}
},
{// 通过下划线分割值,以将它们转换为每个属性的独立数组
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"*": {
"*": "=split('_',@(1,&))"
}
}
}
},
{// 将所有值转换为小写字母
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"*": {
"*": {
"*": "=toLower"
}
}
}
}
},
{// 列举数组的每个组件
"operation": "shift",
"spec": {
"*": {
"*": {
"*": {
"*": "&3.&2.&1.&"
}
}
}
}
},
{// 逐字拆分这些组件
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"*": {
"*": {
"*": "=split('',@(1,&))"
}
}
}
}
},
{// 列举数组的每个组件
"operation": "shift",
"spec": {
"*": {
"*": {
"*": {
"*": {
"*": "&4.&3.&2.&1.&"
}
}
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": {// 仅通过使用第零索引将派生部分的第一个字母转换为大写字母
"*": {
"*": {
"*": {
"0": "=toUpper"
}
}
}
}
}
},
{// 重新排列元素,准备合并这些部分
"operation": "shift",
"spec": {
"*": {
"*": {
"*": {
"*": {
"*": "&4.&3.&2"
}
}
}
}
}
},
{// 合并这些部分以获得新值
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"*": {
"*": "=join('',@(1,&))"
}
}
}
},
{
"operation": "shift",
"spec": {// 使值成为键,而键成为值
"*": {
"*": {
"*": {
"$": "[&3].@(0)"
}
}
}
}
},
{
"operation": "shift",
"spec": {
"*": {// 再次获取真实的空值
"*": {
"null": "[&2].&1",
"*": {
"@1": "[&3].&2"
}
}
}
}
}
]
两个直接的障碍:
- null 值在键值交换过程中消失。使用第一个和最后一个规范来处理这个问题。
- 相同的值会导致在应用键值交换后无法分开键。在规范中增加了额外的深度层级以处理这个问题。
英文:
You can use the following spec
[// Preparation for the next spec for assigning default "null" for null values of which the attributes won't vanish
{
"operation": "default",
"spec": {
"*": {
"*": "null"
}
}
},
{// Exchange key-value pairs
"operation": "shift",
"spec": {
"*": {
"*": {
"$": "&2.&1.@(0)"
}
}
}
},
{// Split values by underscores in order to convert them to independent arrays for each attribute
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"*": {
"*": "=split('_',@(1,&))"
}
}
}
},
{// Convert all values to lowercase letters
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"*": {
"*": {
"*": "=toLower"
}
}
}
}
},
{// Enumerate each components of the arrays
"operation": "shift",
"spec": {
"*": {
"*": {
"*": {
"*": "&3.&2.&1.&"
}
}
}
}
},
{// Split those components letterwise
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"*": {
"*": {
"*": "=split('',@(1,&))"
}
}
}
}
},
{// Enumerate each components of the arrays
"operation": "shift",
"spec": {
"*": {
"*": {
"*": {
"*": {
"*": "&4.&3.&2.&1.&"
}
}
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": {// Convert only the first letters of the derived pieces to uppercase letters by use of 0th(zeroth) index
"*": {
"*": {
"*": {
"0": "=toUpper"
}
}
}
}
}
},
{// Rearrange the elements to prepare to combine the pieces
"operation": "shift",
"spec": {
"*": {
"*": {
"*": {
"*": {
"*": "&4.&3.&2"
}
}
}
}
}
},
{// Combine the pieces in order to get new values
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"*": {
"*": "=join('',@(1,&))"
}
}
}
},
{
"operation": "shift",
"spec": {// Make values keys, while keys to values
"*": {
"*": {
"*": {
"$": "[&3].@(0)"
}
}
}
}
},
{
"operation": "shift",
"spec": {
"*": {// get back again the real null values
"*": {
"null": "[&2].&1",
"*": {
"@1": "[&3].&2"
}
}
}
}
}
]
There are two immediate handicaps :
-
Disappearing null values during key-value exchange. Used the first and the last specs to handle this issue.
-
Identical values which would prevent separation of keys after applied key-value exchange. An extra level of deepness added to specs in order to handle this.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论