英文:
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": ""
      }
    }
  }
]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论