json - Jolt 将 json 转换为 json 替换常量中的值

标签 json jolt

您好,我需要将 json 转换为 json,替换 key ,具体取决于某些 值:

key: vdevice-name

 if value of key is 10.127.200.1 replace with "Alfa"
 if value of key is 10.127.200.2 replace with "beta"
 if value of key is 10.127.200.3 replace with "omega"

Input 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,
       "vdevice-host-name": "AEXI630_XITO098_E_COUNTRY_2081",
       "local-color": "mpls",
       "detect-multiplier": "7",
       "vdevice-dataKey": "10.127.200.1-mpls-10.157.96.2-mpls-ipsec",
       "@rid": 168682,
       "proto": "ipsec",
       "lastupdated": 1623334401562,
       "tx-interval": 1010,
       "state": "up",
       "uptime-date": 1623334260000
     },
     {
       "src-ip": "10.161.25.170",
       "dst-ip": "10.162.45.94",
       "vdevice-name": "10.127.200.2",
       "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-mpls-ipsec",
       "@rid": 206290,
       "proto": "ipsec",
       "lastupdated": 1623334401562,
       "tx-interval": 1000,
       "state": "up",
       "uptime-date": 1623334260000
     }
   ]
}

desired Output JSON:

{
   "data": [
     {
       "src-ip": "10.161.25.170",
       "dst-ip": "10.161.25.182",
       "vdevice-name": "Alfa",
       "color": "mpls",
       "src-port": 12346,
       "createTimeStamp": 1623334401569,
       "system-ip": "10.157.96.2",
       "dst-port": 12346,
       "site-id": 141011085,
       "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.96.2-mpls-ipsec",
       "@rid": 168682,
       "proto": "ipsec",
       "lastupdated": 1623334401562,
       "tx-interval": 1010,
       "state": "up",
       "uptime-date": 1623334260000
     },
     {
       "src-ip": "10.161.25.170",
       "dst-ip": "10.162.45.94",
       "vdevice-name": "beta",
       "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-mpls-ipsec",
       "@rid": 206290,
       "proto": "ipsec",
       "lastupdated": 1623334401562,
       "tx-interval": 1000,
       "state": "up",
       "uptime-date": 1623334260000
     }
   ]
}

I'm trying the follow spec:

 [
   {
     "operation": "shift",
     "spec": {
       "data": {
         "*": {
           "vdevice-name": {
             "10.127.200.1": {
               "#Alfa": "vdevice-name"
             },
             "10.127.200.2": {
               "#beta": "vdevice-name"
             },
             "10.127.200.3": {
               "#omega": "vdevice-name"
             }
           },
           "*": "&"
         }
       }
     }
   }
]

But my output is:

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

我需要帮助:)

最佳答案

我是这样做的:

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "vdevice-name": {
            "10.127.200.1": {
              "#alfa": "data[&3].vdevice-name"
            },
            "10.127.200.2": {
              "#omega": "data[&3].vdevice-name"
            },
            "*": {
              "$": "data[&3].vdevice-name"
            }
          },
          "*": "data[&1].&"
        }
      }
    }
  }
]

关于json - Jolt 将 json 转换为 json 替换常量中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68202658/

相关文章:

java - 使用 Jackson 在有或没有编码(marshal)处理的情况下构建自定义 JSON?

javascript - 如何读取多维JSON数组?

jquery - 链接中的空格被替换为%2520而不是%20 jquery

java - 从apache nifi中的嵌套json中提取值

java - 如何将json中的字符串转换为json对象

json - JOLT 获取带有动态键的数组

arrays - JOLT 转换将相同的元素添加到所有数组中

json - 如何使用jolt将嵌套数据变成线性数据

java - 从 Url 解析 JSON(随机生成)时,TextViews 上没有任何显示; (Java,安卓)

javascript - 使用 Angular 读取 JSON