首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将json变换为json替换常量值

将json变换为json替换常量值
EN

Stack Overflow用户
提问于 2021-06-30 23:36:46
回答 2查看 255关注 0票数 2

你好,我需要将json转换为json,替换键,具体取决于以下几个值:

密钥: vdevice-name

如果键值为10.127.200.1,则用"Alfa“替换为”Alfa“,如果键值为10.127.200.2。2如果键值为10.127.200.3,则用"beta”替换。

输入JSON:

代码语言:javascript
复制
 {
   "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
     }
   ]
}

想要的输出JSON:

代码语言:javascript
复制
{
   "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
     }
   ]
}

,我正在尝试下面的规范:

代码语言:javascript
复制
 [
   {
     "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"
             }
           },
           "*": "&"
         }
       }
     }
   }
]

,但我的输出是:

代码语言:javascript
复制
{
  "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 ]
}

我需要帮助:)

EN

回答 2

Stack Overflow用户

发布于 2021-07-01 03:12:49

我是这样做的:

代码语言:javascript
复制
[
  {
    "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].&"
        }
      }
    }
  }
]
票数 2
EN

Stack Overflow用户

发布于 2021-07-01 07:49:02

实际上,您的解决方案可以工作,子项可以转换为替换,以使它们具有动态,而不是单独地重复它们,例如

代码语言:javascript
复制
[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "vdevice-name": {
            "10.127.200.1": {
              "#alfa": "&4[&3].&2"
            },
            "10.127.200.2": {
              "#omega": "&4[&3].&2"
            },
            "*": {
              "$": "&4[&3].&2"
            }
          },
          "*": "&2[&1].&"
        }
      }
    }
  }
]

其中,&4意味着上升4层,读取键(data),&2表示上升2级,读取键(vdevice-name)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68202658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档