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

json到json的Jolt转换删除键值并添加拆分字符串值

子车高超
2023-03-14

我需要使用jolt转换来执行以下JSON转换:

需要取下钥匙:

src 端口tx 间隔

要更改密钥的名称:

vdevice-host-namelocal-host-name

要拆分键:值键的字符串值,请虚拟设备数据

示例:

“vdevice-dataKey”:“10.127.200.1-mpls-10.157.96.2-internet-ipsec” to

“远程系统ip:10.157.96.2”

输入 JSON 为:

 {
    "data": [{
        "src-ip": "10.161.25.170",
        "dst-ip": "10.161.25.182",
        "vdevice-name": "10.127.200.1",
        "color": "mpls",
        "src-port": 12346,
        "createTimeStamp": 1623334401569,
        "system-ip": "10.157.96.2",
        "dst-port": 12346,
        "site-id": 141011085,
        "transitions": 0,
        "local-host-name": "AEXI630_XITO098_E_COUNTRY_2081",
        "local-color": "mpls",
        "detect-multiplier": "7",
        "vdevice-dataKey": "10.127.200.1-mpls-10.157.96.2-internet-ipsec",
        "@rid": 168682,
        "vmanage-system-ip": "10.127.200.1",
        "proto": "ipsec",
        "lastupdated": 1623334401562,
        "state": "up",
        "tx-interval": 1000,
        "uptime-date": 1623334260000
    }, {
        "src-ip": "10.161.25.170",
        "dst-ip": "10.162.45.94",
        "vdevice-name": "10.127.200.1",
        "color": "mpls",
        "src-port": 12346,
        "createTimeStamp": 1623334402985,
        "system-ip": "10.157.16.2",
        "dst-port": 12346,
        "site-id": 142011050,
        "transitions": 0,
        "vdevice-host-name": "AEXI630_XITO098_E_COUNTRY_2081",
        "local-color": "mpls",
        "detect-multiplier": "7",
        "vdevice-dataKey": "10.127.200.1-mpls-10.157.16.2-internet-ipsec",
        "@rid": 206290,
        "vmanage-system-ip": "10.127.200.1",
        "proto": "ipsec",
        "lastupdated": 1623334401562,
        "state": "up",
        "tx-interval": 1000,
        "uptime-date": 1623334260000
    }]
}

输出JSON为:

 {
    "data": [{
        "src-ip": "10.161.25.170",
        "dst-ip": "10.161.25.182",
        "vdevice-name": "10.127.200.1",
        "color": "mpls",
        "createTimeStamp": 1623334401569,
        "system-ip": "10.157.96.2",
        "dst-port": 12346,
        "site-id": 141011085,
        "transitions": 0,
        "local-host-name": "AEXI630_XITO098_E_COUNTRY_2081",
        "local-color": "mpls",
        "detect-multiplier": "7",
        "vdevice-dataKey": "10.127.200.1-mpls-10.157.96.2-internet-ipsec",
        "@rid": 168682,
        "vmanage-system-ip": "10.127.200.1",
        "proto": "ipsec",
        "lastupdated": 1623334401562,
        "state": "up",
        "uptime-date": 1623334260000,
        "remote-system-ip":"10.157.96.2",
        "remote-color":"internet"
    }, {
        "src-ip": "10.161.25.170",
        "dst-ip": "10.162.45.94",
        "vdevice-name": "10.127.200.1",
        "color": "mpls",
        "createTimeStamp": 1623334402985,
        "system-ip": "10.157.16.2",
        "dst-port": 12346,
        "site-id": 142011050,
        "transitions": 0,
        "local-host-name": "AEXI630_XITO098_E_COUNTRY_2081",
        "local-color": "mpls",
        "detect-multiplier": "7",
        "vdevice-dataKey": "10.127.200.1-mpls-10.157.16.2-internet-ipsec",
        "@rid": 206290,
        "vmanage-system-ip": "10.127.200.1",
        "proto": "ipsec",
        "lastupdated": 1623334401562,
        "state": "up",
        "uptime-date": 1623334260000,
        "remote-system-ip":"10.157.16.2",
        "remote-color":"internet"
    }]
}

共有1个答案

呼延钱明
2023-03-14

您可以连续应用Shift转换以生成要渲染的新元素,然后修改覆盖测试转换以将字符串拆分为碎片以确定远程系统ip和远程颜色值,然后删除转换以删除所需的键以及最近生成的键,例如

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "vdevice-host-name": "&2.[&1].local-host-name",
          "local-host-name": "&2.[&1].&",
          "*": "&2.[&1].&",
          "@(0,vdevice-dataKey)": "&2.[&1].remote"
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "*": {
          "remote": "=split('-', @(1,&))",
          "remote-system-ip": "@(1,remote[2])",
          "remote-color": "@(1,remote[3])"
        }
      }
    }
  },
  {
    "operation": "remove",
    "spec": {
      "*": {
        "*": {
          "src-port": "",
          "tx-interval": "",
          "remote": ""
        }
      }
    }
  }
]
 类似资料:
  • 编辑:键名称是动态的和未知的。 我想获取一个对象,并创建一个字符串数组,将每个键和值连接在一起。 我的键包含下划线,我需要摆脱(我有这部分工作)。我正在努力弄清楚下一步将所有内容连接在一起。(我想我错过了如何从RHS引用键和值?) 输入: 期望输出: 规格: 电流规格输出:

  • 我想转换我的嵌套json消息,并使用Jolt规范只获取必需的文件- 我的输入JSON: 低于我的规格输出,这不是预期的- 我尝试了很多选择,但国籍不是我预期的输出。请在这里帮助颠簸转换

  • 我正在尝试使用JOLT进行JSON转换,我想我已经很接近了,但是我不能做的是为每个当前没有出现的字段添加一个新字段。 我已经阅读了很多教程,下面的代码是我希望能够工作的。然而,它似乎没有添加到新的“名称”字段中。 这是我的震撼: 这是输出: 我希望它是这样的: 谁能告诉我哪里出错了?显然,默认值用于添加新项目,但它似乎没有执行任何操作。

  • 我需要使用jolt转换来执行以下JSON转换。 需要将输入Json中的“PID3”值拆分为输出Json中的键值对数组 输入JSON 输出数据杰明 --基于输入字符串的多个

  • 问题内容: 我试图使用分隔符拆分值。但是我发现了令人惊讶的结果 我期望得到8个值。[5,6,7,EMPTY,8,9,EMPTY,EMPTY] 但是我只得到6个值。 任何想法以及如何解决。无论EMPTY值在何处,它都应该位于数组中。 问题答案: 默认情况下,从结果数组中删除结尾的空字符串。要关闭此机制,我们需要使用重载版本,将其设置为负值,例如 更多细节: 内部返回该方法的结果,你可以在此方法的文档

  • 任何想法和如何修复。无论空值出现在任何位置,它都应该在数组中。