Json 使用震动将一个数组转换为另一个数组

Json 使用震动将一个数组转换为另一个数组,json,jolt,Json,Jolt,我已经尝试使用如下的Jolt将输入json字符串转换为另一个字符串。但是我无法编写正确的Jolt规范来实现转换,Jolt可以这样做吗?谢谢 输入: { "result": [ { "name": "AAA", "value1": "AAA-111", "value2": "AAA-222", "value3": "AAA-333" }, { "name": "BBB", "value1": "BB

我已经尝试使用如下的Jolt将输入json字符串转换为另一个字符串。但是我无法编写正确的Jolt规范来实现转换,Jolt可以这样做吗?谢谢

输入:

{
  "result": [
    {
      "name": "AAA",
      "value1": "AAA-111",
      "value2": "AAA-222",
      "value3": "AAA-333"
    },
    {
      "name": "BBB",
      "value1": "BBB-111",
      "value2": "BBB-222",
      "value3": "BBB-333"
    },
    {
      "name": "CCC",
      "value1": "CCC-111",
      "value2": "CCC-222",
      "value3": "CCC-333"
    }
  ]
}
{
  "result": [
    {
      "value_name":"value1",
      "AAA":"AAA-111",
      "BBB":"BBB-111",
      "CCC":"CCC-111"
    },
    {
      "value_name":"value2",
      "AAA":"AAA-222",
      "BBB":"BBB-222",
      "CCC":"CCC-222"
    },
    {
      "value_name":"value3",
      "AAA":"AAA-333",
      "BBB":"BBB-333",
      "CCC":"CCC-333"
    }
  ]
}
输出:

{
  "result": [
    {
      "name": "AAA",
      "value1": "AAA-111",
      "value2": "AAA-222",
      "value3": "AAA-333"
    },
    {
      "name": "BBB",
      "value1": "BBB-111",
      "value2": "BBB-222",
      "value3": "BBB-333"
    },
    {
      "name": "CCC",
      "value1": "CCC-111",
      "value2": "CCC-222",
      "value3": "CCC-333"
    }
  ]
}
{
  "result": [
    {
      "value_name":"value1",
      "AAA":"AAA-111",
      "BBB":"BBB-111",
      "CCC":"CCC-111"
    },
    {
      "value_name":"value2",
      "AAA":"AAA-222",
      "BBB":"BBB-222",
      "CCC":"CCC-222"
    },
    {
      "value_name":"value3",
      "AAA":"AAA-333",
      "BBB":"BBB-333",
      "CCC":"CCC-333"
    }
  ]
}
这不仅仅是“将一个数组转置到另一个数组”

这里实际上有四件事:

  • 将传入数据透视/分组为“value1”、“value2”、“value3”
  • 从假定以连字符分隔的密钥中提取一个新密钥“AAA”。又名构建“AAA”:“AAA-111”
  • 将“value1”、“value2”等设置为“value\u name”的值,而不是json中的键
  • 给定看到的“value1/2/3”项的数量,而不是传入数组中的元素数量,构建输出数组。例如,如果您的三个输入项根本没有定义“value3”,那么您的最终输出“result”数组将只有两个数组元素;一个表示“值1”,一个表示“值2”
  • 这个规范是可行的,但考虑到正在进行的工作可能是脆弱的wrt输入

    为了理解这一点,我建议打开jolt演示站点的4个浏览器选项卡,单独运行每个轮班操作,将一个选项卡的输出复制到下一个选项卡的输入中

    我就是这样写的

    规格

    [
    {
    “操作”:“移位”,
    “规格”:{
    “结果”:{
    "*": {
    //首先,按valueKEY将所有数据分组
    “值*”:“&[]”
    }
    }
    }
    },
    {
    //接下来构建“AAA”:“AAA-111”结构
    //但尚未在最终结果数组中
    “操作”:“移位”,
    “规格”:{
    “value*”:{//应该是value1、value2等
    “*”:{//数组索引
    "*-*": {
    //保持顶级值1、值2
    //但现在构建“AAA”:“AAA-111”逻辑
    //这是假设它是以“-”分隔的
    "@1": "&3.&(1,1)"
    }
    }
    }
    }
    },
    {
    //现在构建'value_name':'value1'
    “操作”:“移位”,
    “规格”:{
    “值*”:{
    //通过“AAA”:“AAA-111”数据
    "*": "&1.&",
    //
    //将值名称向下推为“AAA”的同级名称:“AAA-111”
    “$”:“&1.值\u名称”
    }
    }
    },
    {
    //最后,现在核心数据已全部设置完毕,请累积
    //排成一列
    “操作”:“移位”,
    “规格”:{
    “值*”:“结果[]”
    }
    }
    ]
    
    这不仅仅是“将一个数组转置到另一个数组”

    这里实际上有四件事:

  • 将传入数据透视/分组为“value1”、“value2”、“value3”
  • 从假定以连字符分隔的密钥中提取一个新密钥“AAA”。也称为构建“AAA”:“AAA-111”
  • 将“value1”、“value2”等设置为“value\u name”的值,而不是json中的键
  • 根据看到的“value1/2/3”项的数量,而不是传入数组中的元素数量,构建输出数组。例如,如果三个输入项根本没有定义“value3”,那么最终输出“result”数组将只有两个数组元素;一个用于“value1”,一个用于“value2”
  • 这个规范是可行的,但考虑到正在进行的工作可能是脆弱的wrt输入

    为了理解这一点,我建议打开jolt演示站点的4个浏览器选项卡,单独运行每个轮班操作,将一个选项卡的输出复制到下一个选项卡的输入中

    我就是这样写的

    规格

    [
    {
    “操作”:“移位”,
    “规格”:{
    “结果”:{
    "*": {
    //首先,按valueKEY将所有数据分组
    “值*”:“&[]”
    }
    }
    }
    },
    {
    //接下来构建“AAA”:“AAA-111”结构
    //但尚未在最终结果数组中
    “操作”:“移位”,
    “规格”:{
    “value*”:{//应该是value1、value2等
    “*”:{//数组索引
    "*-*": {
    //保持顶级值1、值2
    //但现在构建“AAA”:“AAA-111”逻辑
    //这是假设它是以“-”分隔的
    "@1": "&3.&(1,1)"
    }
    }
    }
    }
    },
    {
    //现在构建'value_name':'value1'
    “操作”:“移位”,
    “规格”:{
    “值*”:{
    //通过“AAA”:“AAA-111”数据
    "*": "&1.&",
    //
    //将值名称向下推为“AAA”的同级名称:“AAA-111”
    “$”:“&1.值\u名称”
    }
    }
    },
    {
    //最后,现在核心数据已全部设置完毕,请累积
    //排成一列
    “操作”:“移位”,
    “规格”:{
    “值*”:“结果[]”
    }
    }
    ]
    
    谢谢您的回复!对不起,我的坏例子,在你的步骤2中,我的意思是新的键不是从相应的值中提取出来的,而是来自“name”的键。你能提供这个假设的另一个规格吗?或者我应该发布另一个问题吗?非常感谢。谢谢你的回复!对不起,我的坏例子,在你的步骤2中,我的意思是新的键不是从相应的值中提取出来的,而是来自“name”的键。你能提供这个假设的另一个规格吗?或者我应该发布另一个问题吗?非常感谢。