英文:
How to convert nested data into linear data using jolt
问题
如何使用jolt将这个嵌套数据转换为如下所示的线性格式数据?需要为所有嵌套数据创建单独的条目。每条记录应包含以下5个数据:practice_loc
,prac_num
,topId
,S1
和S2
。
我必须编写一个jolt来进行转换,下面是数据的所有可能情况:
数据
第1种情况:
输入:
{
"practice_loc": 120,
"prac_num": 234,
"topId": "t1",
"subList": [
{
"S1": "A1",
"S2": "B1"
},
{
"S1": "A2"
}
]
}
转换后:
{
"practice_loc": 120,
"prac_num": 234,
"topId": "t1",
"S1": "A1",
"S2": "B1"
},
{
"practice_loc": 120,
"prac_num": 234,
"topId": "t1",
"S1": "A2"
}
第2种情况可以是:
输入:
{
"practice_loc": 987,
"prac_num": 232,
"topId": "artica",
"subList": [
{
"S1": "A5",
"S2": "B7"
}
]
}
转换后:
{
"practice_loc": 987,
"prac_num": 232,
"topId": "artica",
"S1": "A5",
"S2": "B7"
}
第3种情况可以是:
输入:
{
"practice_loc": 334,
"prac_num": 233,
"topId": "plumcherry",
"subList": [
{
"S1": "A3"
}
]
}
转换后:
{
"practice_loc": 334,
"prac_num": 233,
"topId": "plumcherry",
"S1": "A3"
}
第4种情况可以是:
输入:
{
"practice_loc": 987,
"prac_num": 232,
"topId": "rose",
"subList": [
{}
]
}
转换后:
{
"practice_loc": 987,
"prac_num": 232,
"topId": "rose"
}
我该如何编写一个jolt,可以处理所有这些情况,并返回转换后的数据,无论输入是哪种类型的?
英文:
How can I convert this nested data to linear format data as mentioned below using jolt. Need to create separate entry for all the nested data. every record should have 5 data in it practice_loc
,prac_num
,topId
,S1
and S2
.
I have to write one jolt for transforming, data below are all possibilities of data
Data
1st case ;
Input :
{
"practice_loc": 120,
"prac_num": 234,
"topId": "t1",
"subList": [
{
"S1": "A1",
"S2": "B1"
},
{
"S1": "A2"
}
]
}
After transformation:
{
"practice_loc": 120,
"prac_num": 234,
"topId": "t1",
"S1": "A1",
"S2": "B1"
},
{
"practice_loc": 120,
"prac_num": 234,
"topId": "t1",
"S1": "A2"
}
2nd case can be;
Input:
{
"practice_loc": 987,
"prac_num": 232,
"topId": "artica",
"subList": [
{
"S1": "A5",
"S2": "B7"
}
]
}
After transformation :
{
"practice_loc": 987,
"prac_num": 232,
"topId": "artica",
"S1": "A5",
"S2": "B7"
}
3rd case can be;
Input :
{
"practice_loc": 334,
"prac_num": 233,
"topId": "plumcherry",
"subList": [
{
"S1": "A3"
}
]
}
After transformation :
{
"practice_loc": 334,
"prac_num": 233,
"topId": "plumcherry",
"S1": "A3"
}
4th case can be ;
Input :
{
"practice_loc": 987,
"prac_num": 232,
"topId": "rose",
"subList": [
{}
]
}
After transformation :
{
"practice_loc": 987,
"prac_num": 232,
"topId": "rose"
}
How can I write only one jolt which can cover all these cases and return the transformed data with whichever type of input it get
答案1
得分: 2
以下是翻译好的内容:
您可以使用以下转换
[
{ // 通过上一级对象包装节点对元素进行分组
"operation": "shift",
"spec": {
"subList": {
"*": {
"@2|@": "&3_&1" // 通过@2选择来自相同级别的“sublist”的外部元素,同时@返回该数组的值
}
}
}
},
{ // 摆脱包装
"operation": "shift",
"spec": {
"*": {
"*": {
"*": "[#3].&"
}
}
}
},
{ // 摆脱额外生成的数组,即“subList”
"operation": "remove",
"spec": {
"*": {
"subList": ""
}
}
}
]
英文:
You can use the following transformation
[
{ // group elements by upper level objects wrapper nodes
"operation": "shift",
"spec": {
"subList": {
"*": {
"@2|@": "&3_&1" // pick the outer elements as well from the same level of "sublist" through use of @2 while @ returns the value from this array
}
}
}
},
{ // get rid of the wrappers
"operation": "shift",
"spec": {
"*": {
"*": {
"*": "[#3].&"
}
}
}
},
{ // get rid of the extra generated array, namely "subList"
"operation": "remove",
"spec": {
"*": {
"subList": ""
}
}
}
]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论