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

JOLT规范,从多个级别合并嵌套数组,并在子项下读取父项值

易奇希
2023-03-14
{
  "device": {
    "id": "336 A6",
    "shelves": [
      {
        "shelfID": "1",
        "slots": [
          {
            "slotID": "1",
            "cards": {
              "cardID": "1",
              "subSlots": [
                {
                  "slotID": "mda-1",
                  "cards": {
                    "cardID": "1/1",
                    "ports": [
                      {
                        "portID": "1/1/1",
                        "adminStatus": "up"
                      },
                      {
                        "portID": "1/1/2",
                        "adminStatus": "up"
                      }
                    ]
                  }
                },
                {
                  "slotID": "mda-2",
                  "cards": {
                    "cardID": "2/1",
                    "ports": [
                      {
                        "portID": "2/1/1",
                        "adminStatus": "up"
                      },
                      {
                        "portID": "2/1/2",
                        "adminStatus": "up"
                      }
                    ]
                  }
                }
              ]
            }
          },
          {
            "slotID": "11",
            "cards": {
              "cardID": "11",
              "ports": [
                {
                  "portID": "11/1/1",
                  "adminStatus": "up"
                },
                {
                  "portID": "11/1/2",
                  "adminStatus": "up"
                }
              ]
            }
          }
        ]
      },
      {
        "shelfID": "esat-1",
        "ports": [
          {
            "portID": "esat-1/1/1",
            "adminStatus": "down"
          },
          {
            "portID": "esat-1/1/2",
            "adminStatus": "up"
          }
        ]
      }
    ]
  }
}
[
  {
    "operation": "shift",
    "spec": {
      "device": {
        "shelves": {
          "*": {
            "ports": {
              "*": "physicalResource.ports[&2]",
              "@(1,shelfID)": "physicalResource.ports[&2].parentId"
            },
            "slots": {
              "*": {
                "cards": {
                  "ports": {
                    "*": "physicalResource.ports[&5]",
                    "@(1,cardID)": "physicalResource.ports[&5].parentId"
                  },
                  "subSlots": {
                    "*": {
                      "cards": {
                        "ports": {
                          "*": "physicalResource.ports[&8]",
                          "@(1,cardID)": "physicalResource.ports[&8].parentId"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]
{
  "physicalResource": {
    "ports": [
      {
        "id": "1/1/1",
        "parentId": "1/1",
        "state": "up"
      },
      {
        "id": "1/1/2",
        "parentId": "1/1",
        "state": "up"
      },
      {
        "id": "2/1/1",
        "parentId": "2/1",
        "state": "up"
      },
      {
        "id": "2/1/2",
        "parentId": "2/1",
        "state": "up"
      },
      {
        "id": "11/1/1",
        "parentId": "11/1",
        "state": "up"
      },
      {
        "id": "11/1/2",
        "parentId": "11/1",
        "state": "up"
      },
      {
        "id": "11/1/1",
        "parentId": "11/1",
        "state": "up"
      },
      {
        "id": "11/1/2",
        "parentId": "11/1",
        "state": "up"
      },
      {
        "id": "esat-1/1/1",
        "parentSubCardId": "esat-1",
        "state": "up"
      },
      {
        "id": "esat-1/1/2",
        "parentSubCardId": "esat-1",
        "state": "up"
      }
    ]
  }
}

谢了。

共有1个答案

丁星火
2023-03-14

这可以分两班完成

  1. 第一次移位使用数组索引和类型创建组。
  2. 第二个移位将这些组隐藏到数组中
[
  {
    "operation": "shift",
    "spec": {
      "device": {
        "shelves": {
          "*": {
            "ports": {
              "*": {
                "@(2,shelfID)": "ports_&3_&1.parentSubCardId",
                "portID": "ports_&3_&1.id",
                "adminStatus": "ports_&3_&1.state"
              }
            },
            "slots": {
              "*": {
                "cards": {
                  "ports": {
                    "*": {
                      "@(2,cardID)": "slots_cards_&4_&1.parentId",
                      "portID": "slots_cards_&4_&1.id",
                      "adminStatus": "slots_cards_&4_&1.state"
                    }
                  },
                  "subSlots": {
                    "*": {
                      "cards": {
                        "ports": {
                          "*": {
                            "@(2,cardID)": "sub_slots_&4_&1.parentId",
                            "portID": "sub_slots_&4_&1.id",
                            "adminStatus": "sub_slots_&4_&1.state"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": "physicalResource.ports[]"
    }
  }
]

我建议不用第二班就运行它,看看发生了什么。

 类似资料:
  • 我正在尝试使用 JOLT 转换 JSON。此 JSON 由嵌套数组组成,我无法获得正确的转换。 这是原始的JSON。请注意,总会有一个带有单个对象的“结果”数组。此对象将始终包含一个“行”数组。我想要行数组中每个元素的字段。 这是我写的规范: 预期的 JSON 是: 然而,我的规范返回以下输出: 水平可能有问题。但是我想不出来。有人能帮忙吗?

  • 我正在尝试使用JOLT转换JSON。这个JSON由嵌套数组组成,我不能正确地转换它。有人能帮忙吗?谢了。 这是我写的规范。 我期待的JSON是: 然而,我得到了错误的输出。不知怎的,我的嵌套对象正在转换为列表。 我不知道出了什么问题。有人能帮忙吗?

  • 我的JSON对象: 我需要以下格式的输出: 我只有一个从两个数组中获取字段的解决方案,但是不确定如何在没有任何公共键的情况下连接它们,并以所需的方式表示它们 当前JOLT规格: 当前不希望的输出: 现在我必须将这些响应与每个answerId结合起来,以获得所需的输出。 此外,我使用Apache Nifi作为解决方案,如果JOLT transform不像预期的那样工作,我们可以使用其他方法/处理器吗

  • 我正在尝试为下面的输入编写一个jolt转换:input 预期输出。 请帮助我在spec.json中实现预期的output . JSON。spec没有转换为预期的输出。我想学习如何在字符串解析器中使用属性

  • 问题内容: MYSQL返回一个数组,如下所示。我正在使用列:“ id_parent”自引用表以创建层次结构。因此,“ id”为2的条目可以是“ id_parent”为2的任何条目的父级,依此类推。 如何将子级嵌套在其父级数组中的数组中 问题答案: 引用具有顺序无关紧要的优点(子节点可以位于其父节点之前):

  • 我正在努力实现以下转变。然而,我的解决方案在最终数组中添加了不需要的空值。 转换需要为所有元素在array中移位名称。我创建了3个案例来说明这个问题。 编辑:< code >根数组将始终至少有1个元素。 当前的JOLT规范工作正常,除了是空数组的情况。它生成值,我试图指定一个空字符串(或任何硬编码的字符串值,如)