当前位置: 首页 > 知识库问答 >
问题:

JOLT移位转换:当有多个属性时,收集所有级别中的所有项目,而不知道有多少级别

仰英发
2023-03-14

我正在尝试使用 Jolt 转换来转换 JSON,在这里寻找一些输入。我正在尝试将所有级别中的所有项目放入一个数组中。我的目标是获得一个包含所有项目的数组,而不知道我在 json 中有多少个级别。

这是我的输入和预期输出:

输入:

{
  "id": 1,
  "item": [
    {
      "id": "1_1",
      "item": [
        {
          "id": "1_1_2",
          "foo": [
            {
              "nn": "cc",
              "vvv": "2022-08-30T06:44:24.943Z",
              "mmm": "oo"
            },
            {
              "nn": "ss",
              "vvv": "rr",
              "mmm": "oo"
            },
            {
              "nn": "ii",
              "vvv": "rr",
              "mmm": "oo"
            },
            {
              "nn": "uu",
              "vvv": "kk",
              "mmm": "oo"
            },
            {
              "nn": "pp",
              "vvv": "aaa",
              "mmm": "oo"
            },
            {
              "nn": "bb",
              "vvv": "tt",
              "mmm": "oo"
            },
            {
              "nn": "ff",
              "vvv": "tt",
              "mmm": "oo"
            },
            {
              "nn": "ff",
              "vvv": "tt",
              "mmm": "oo"
            },
            {
              "nn": "pp",
              "vvv": "yy",
              "mmm": "oo"
            }
          ]
        }
      ],
      "foo": [
        {
          "nn": "cc",
          "vvv": "ww",
          "mmm": "oo"
        },
        {
          "nn": "ss",
          "vvv": "rr",
          "mmm": "oo"
        },
        {
          "nn": "ii",
          "vvv": "rr",
          "mmm": "oo"
        },
        {
          "nn": "uu",
          "vvv": "kk",
          "mmm": "oo"
        },
        {
          "nn": "pp",
          "vvv": "aaa",
          "mmm": "oo"
        },
        {
          "nn": "bb",
          "vvv": "tt",
          "mmm": "oo"
        },
        {
          "nn": "d",
          "vvv": "tt",
          "mmm": "oo"
        },
        {
          "nn": "pp",
          "vvv": "yy",
          "mmm": "oo"
        }
      ]
    },
    {
      "id": "1_2",
      "item": [
        {
          "id": "1_2_1",
          "foo": [
            {
              "nn": "cc",
              "vvv": "ww",
              "mmm": "oo"
            },
            {
              "nn": "ss",
              "vvv": "rr",
              "mmm": "oo"
            },
            {
              "nn": "ii",
              "vvv": "rr",
              "mmm": "oo"
            },
            {
              "nn": "uu",
              "vvv": "kk",
              "mmm": "oo"
            },
            {
              "nn": "pp",
              "vvv": "aaa",
              "mmm": "oo"
            },
            {
              "nn": "bb",
              "vvv": "tt",
              "mmm": "oo"
            },
            {
              "nn": "bb_ee4d6bf4-1081-468a-b7b1-5445333dfab2",
              "vvv": "tt",
              "mmm": "oo"
            },
            {
              "nn": "pp",
              "vvv": "yy",
              "mmm": "oo"
            }
          ]
        }
      ],
      "foo": [
        {
          "nn": "cc",
          "vvv": "ww",
          "mmm": "oo"
        },
        {
          "nn": "ss",
          "vvv": "rr",
          "mmm": "oo"
        },
        {
          "nn": "ii",
          "vvv": "rr",
          "mmm": "oo"
        },
        {
          "nn": "uu",
          "vvv": "kk",
          "mmm": "oo"
        },
        {
          "nn": "pp",
          "vvv": "aaa",
          "mmm": "oo"
        },
        {
          "nn": "bb",
          "vvv": "tt",
          "mmm": "oo"
        },
        {
          "nn": "d",
          "vvv": "tt",
          "mmm": "oo"
        },
        {
          "nn": "pp",
          "vvv": "yy",
          "mmm": "oo"
        }
      ]
    }
  ]
}

预期产出:

[
  {
    "id": "1_1",
    "foo": [
      {
        "nn": "cc",
        "vvv": "ww",
        "mmm": "oo"
      },
      {
        "nn": "ss",
        "vvv": "rr",
        "mmm": "oo"
      },
      {
        "nn": "ii",
        "vvv": "rr",
        "mmm": "oo"
      },
      {
        "nn": "uu",
        "vvv": "kk",
        "mmm": "oo"
      },
      {
        "nn": "pp",
        "vvv": "aaa",
        "mmm": "oo"
      },
      {
        "nn": "bb",
        "vvv": "tt",
        "mmm": "oo"
      },
      {
        "nn": "d",
        "vvv": "tt",
        "mmm": "oo"
      },
      {
        "nn": "pp",
        "vvv": "yy",
        "mmm": "oo"
      }
    ]
  },
  {
    "id": "1_1_2",
    "foo": [
      {
        "nn": "cc",
        "vvv": "2022-08-30T06:44:24.943Z",
        "mmm": "oo"
      },
      {
        "nn": "ss",
        "vvv": "rr",
        "mmm": "oo"
      },
      {
        "nn": "ii",
        "vvv": "rr",
        "mmm": "oo"
      },
      {
        "nn": "uu",
        "vvv": "kk",
        "mmm": "oo"
      },
      {
        "nn": "pp",
        "vvv": "aaa",
        "mmm": "oo"
      },
      {
        "nn": "bb",
        "vvv": "tt",
        "mmm": "oo"
      },
      {
        "nn": "ff",
        "vvv": "tt",
        "mmm": "oo"
      },
      {
        "nn": "ff",
        "vvv": "tt",
        "mmm": "oo"
      },
      {
        "nn": "pp",
        "vvv": "yy",
        "mmm": "oo"
      }
    ]
  },
  {
    "id": "1_2",
    "foo": [
      {
        "nn": "cc",
        "vvv": "ww",
        "mmm": "oo"
      },
      {
        "nn": "ss",
        "vvv": "rr",
        "mmm": "oo"
      },
      {
        "nn": "ii",
        "vvv": "rr",
        "mmm": "oo"
      },
      {
        "nn": "uu",
        "vvv": "kk",
        "mmm": "oo"
      },
      {
        "nn": "pp",
        "vvv": "aaa",
        "mmm": "oo"
      },
      {
        "nn": "bb",
        "vvv": "tt",
        "mmm": "oo"
      },
      {
        "nn": "d",
        "vvv": "tt",
        "mmm": "oo"
      },
      {
        "nn": "pp",
        "vvv": "yy",
        "mmm": "oo"
      }
    ]
  },
  {
    "id": "1_2_1",
    "foo": [
      {
        "nn": "cc",
        "vvv": "ww",
        "mmm": "oo"
      },
      {
        "nn": "ss",
        "vvv": "rr",
        "mmm": "oo"
      },
      {
        "nn": "ii",
        "vvv": "rr",
        "mmm": "oo"
      },
      {
        "nn": "uu",
        "vvv": "kk",
        "mmm": "oo"
      },
      {
        "nn": "pp",
        "vvv": "aaa",
        "mmm": "oo"
      },
      {
        "nn": "bb",
        "vvv": "tt",
        "mmm": "oo"
      },
      {
        "nn": "bb_ee4d6bf4-1081-468a-b7b1-5445333dfab2",
        "vvv": "tt",
        "mmm": "oo"
      },
      {
        "nn": "pp",
        "vvv": "yy",
        "mmm": "oo"
      }
    ]
  }
]

我的震动规格:

[
  {
    "operation": "shift",
    "spec": {
      "item": {
        "*": {
          "*": "&",
          "item": {
            "*": {
              "*": "&",
              "item": {
                "*": {
                  "*": "&"
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[#1].&1"
      }
    }
  }
]

结果:

[ {
  "id" : "1_1",
  "foo" : {
    "nn" : "cc",
    "vvv" : "2022-08-30T06:44:24.943Z",
    "mmm" : "oo"
  }
}, {
  "id" : "1_1_2",
  "foo" : {
    "nn" : "ss",
    "vvv" : "rr",
    "mmm" : "oo"
  }
}, {
  "id" : "1_2",
  "foo" : {
    "nn" : "ii",
    "vvv" : "rr",
    "mmm" : "oo"
  }
}, {
  "id" : "1_2_1",
  "foo" : {
    "nn" : "uu",
    "vvv" : "kk",
    "mmm" : "oo"
  }
}, {
  "foo" : {
    "nn" : "pp",
    "vvv" : "aaa",
    "mmm" : "oo"
  }
}, {
  "foo" : {
    "nn" : "bb",
    "vvv" : "tt",
    "mmm" : "oo"
  }
}, {
  "foo" : {
    "nn" : "ff",
    "vvv" : "tt",
    "mmm" : "oo"
  }
}, {
  "foo" : {
    "nn" : "ff",
    "vvv" : "tt",
    "mmm" : "oo"
  }
}, {
  "foo" : {
    "nn" : "pp",
    "vvv" : "yy",
    "mmm" : "oo"
  }
}, {
  "foo" : [ {
    "nn" : "cc",
    "vvv" : "ww",
    "mmm" : "oo"
  }, {
    "nn" : "ss",
    "vvv" : "rr",
    "mmm" : "oo"
  }, {
    "nn" : "ii",
    "vvv" : "rr",
    "mmm" : "oo"
  }, {
    "nn" : "uu",
    "vvv" : "kk",
    "mmm" : "oo"
  }, {
    "nn" : "pp",
    "vvv" : "aaa",
    "mmm" : "oo"
  }, {
    "nn" : "bb",
    "vvv" : "tt",
    "mmm" : "oo"
  }, {
    "nn" : "d",
    "vvv" : "tt",
    "mmm" : "oo"
  }, {
    "nn" : "pp",
    "vvv" : "yy",
    "mmm" : "oo"
  } ]
}, {
  "foo" : [ {
    "nn" : "cc",
    "vvv" : "ww",
    "mmm" : "oo"
  }, {
    "nn" : "ss",
    "vvv" : "rr",
    "mmm" : "oo"
  }, {
    "nn" : "ii",
    "vvv" : "rr",
    "mmm" : "oo"
  }, {
    "nn" : "uu",
    "vvv" : "kk",
    "mmm" : "oo"
  }, {
    "nn" : "pp",
    "vvv" : "aaa",
    "mmm" : "oo"
  }, {
    "nn" : "bb",
    "vvv" : "tt",
    "mmm" : "oo"
  }, {
    "nn" : "bb_ee4d6bf4-1081-468a-b7b1-5445333dfab2",
    "vvv" : "tt",
    "mmm" : "oo"
  }, {
    "nn" : "pp",
    "vvv" : "yy",
    "mmm" : "oo"
  } ]
}, {
  "foo" : [ {
    "nn" : "cc",
    "vvv" : "ww",
    "mmm" : "oo"
  }, {
    "nn" : "ss",
    "vvv" : "rr",
    "mmm" : "oo"
  }, {
    "nn" : "ii",
    "vvv" : "rr",
    "mmm" : "oo"
  }, {
    "nn" : "uu",
    "vvv" : "kk",
    "mmm" : "oo"
  }, {
    "nn" : "pp",
    "vvv" : "aaa",
    "mmm" : "oo"
  }, {
    "nn" : "bb",
    "vvv" : "tt",
    "mmm" : "oo"
  }, {
    "nn" : "d",
    "vvv" : "tt",
    "mmm" : "oo"
  }, {
    "nn" : "pp",
    "vvv" : "yy",
    "mmm" : "oo"
  } ]
} ]

只有前4项包含id和foo,但并不是它们的foo值都只有一个。

你能告诉我怎么做对吗?

共有1个答案

堵乐
2023-03-14

显然,需要在每个节点按id值分组,例如

json prettyprint-override">[
  {
    "operation": "shift",
    "spec": {
      "item": {
        "*": {
          "*": "@(1,id).&",
          "item": {
            "*": {
              "*": "@(1,id).&",
              "item": {
                "*": {
                  "*": "@(1,id).&"
                }
              }
            }
          }
        }
      }
    }
  },
  {
   // get rid of object labels
    "operation": "shift",
    "spec": {
      "*": ""
    }
  }
]
 类似资料:
  • 我正在尝试使用 Jolt 转换来转换 JSON,在这里寻找一些输入。我正在尝试将所有级别中的所有项目放入一个数组中。 我的目标是获得一个包含所有项目的数组,而不知道我在json中有多少个级别。 这是我的输入和预期输出: 如果我有三个等级: 输入: 预期产出: 如果我有两个级别: 输入: 预期产出: 我试着写下这样的话: 结果为空,如果我单独运行每个转换,我会在适用时得到结果。你能帮我写一个简单的规

  • 我正在尝试使用Jolt transformation转换一个JSON,在这里寻找一些输入。我试图将所有级别的内部项目放入一个数组中。我的目标是得到一个包含部分条目的数组,而不需要知道我在一个spen中的一个列表中有多少级。 这是我的输入和预期输出: 输入: 预期产出:(列表) 我的震动规格: 我的输出: 如果输入中有多个项目,我会得到一个列表,但如果只有一个项目,则不会。你知道我应该怎么把它转换成

  • 我使用codeigniter和有一个表3列(id,名称,parent_id)。一个类别可以有多个子类别,一个子类别可以有多个子类别。 我一直在尝试使用以下代码获取所有类别及其子类别: 但它只返回1级类别。 我的问题是如何完成我的任务:获得每个级别的所有类别和子类别。

  • 我在linux服务器上的一个备份中遇到了一个问题,它以某种方式将文件的所有文件夹向下移动了一个级别,放入了一个同名的新文件夹。我想将所有文件返回到其原始位置。许多文件的名称中有空格,使事情复杂化。 原始目录结构: 目录结构不正确: 请注意,我不希望子文件夹中的文件移动到文件夹1中,但我确实希望子文件夹本身向上移动一级。 我尝试了一些类似的命令,基于这里一些相关的线程,但没有成功,而是尝试将文件移动

  • 问题内容: 我有以下收藏 场地集合 评论集 评论集 作者集 现在我下面的填充查询工作正常 但是我想通过查询来实现它,但是当我对评论进行“ $ unwind”操作时,它会分割场地…我希望评论以相同的数组(例如填充)和相同的顺序… 我想实现以下查询,因为作者具有followers字段,所以我需要通过发送来发送字段,而使用… 问题答案: 当然有两种方法,具体取决于您可用的MongoDB版本。从到的不同用