首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助解析来自以下JSON原始输入的数据

需要帮助解析来自以下JSON原始输入的数据
EN

Stack Overflow用户
提问于 2019-11-07 12:51:15
回答 2查看 108关注 0票数 0
代码语言:javascript
复制
{
  "description": "NetSpy Integration",
  "event_type": "trigger",
  "service_key": "34a9a87f27f6173f",
  "details": {
    "uri": {
      "slashes": true,
      "search": "",
      "query": {
      },
      "protocol": "http:",
      "port": null,
      "pathname": "/integration/34a9a87f27f6173f /enqueue",
      "path": "/integration/34a9a87f27f6173f /enqueue",
      "href": "http://events.pagerduty.com/integration/34a9a87f27f6173f/enqueue",
      "hostname": "events.pagerduty.com",
      "host": "events.pagerduty.com",
      "hash": null,
      "auth": null
    },
    "rawBody": "{\"client_url\":\"http://GINC-prod-nsg-mon-5:9100/\",\"service_key\":\"34a9a87f27f6173f \",\"event_type\":\"trigger\",\"description\":\"Interface is down for a viptela router\",\"client\":\"NetSpyGlassTest\",\"details\":{\"client\":\"NSG\",\"client_url\":\"https://GINC.netspyglass.com/\",\"component\":\"ge0/1\",\"dedup_key\":\"$dedupKey\",\"device\":\"myrtr1\",\"event_action\":\"trigger\",\"payload.class\":\"deploy\",\"payload.cmdb_ci\":\"myrtr1\",\"payload.component\":\"postgres\",\"payload.custom_details.abc\":\"123\",\"payload.custom_details.def\":\"Hi, its Nikita\",\"payload.group\":\"prod-datapipe\",\"payload.severity\":\"{}\",\"payload.source\":\"https://GINC.netspyglass.com/\",\"payload.summary\":\"Interface is down for a router\",\"payload.timestamp\":\"\",\"routing_key\":\"34a9a87f27f6173f \",\"value\":\"2.0\"},\"incident_key\":\"ViptelaRouterInterfaceDown.9853.2\",\"contexts\":[{\"href\":\"http://GINC-prod-nsg-mon-5:9100/\",\"type\":\"link\"},{\"src\":\"https://GINC.netspyglass.com/emb_graph.html?update=true&networkId=1&intervalHr=24&width=500&height=300&vars=ifOperStatus.9853.2\",\"type\":\"image\"}]}",
    "method": "POST",
    "headers": [
      {
        "X-Real-IP": "10.16.121.254"
      },
      {
        "X-Forwarded-For": "10.16.121.254"
      },
      {
        "Host": "events.pagerduty.com"
      },
      {
        "X-Forwarded-Proto": "https"
      },
      {
        "Connection": "close"
      },
      {
        "Content-Length": "1054"
      },
      {
        "User-Agent": "Apache-HttpClient/4.5.2 (Java/11.0.4)"
      },
      {
        "Accept-Encoding": "gzip,deflate"
      },
      {
        "X-PD-Event-Received": "1572013154"
      }
    ],
    "body": ""
  }
}

需要对上述数据进行分析,使其如下所示:

代码语言:javascript
复制
description: "Interface is down for a viptela router"
cmdb_ci: "myrtr1"
Error URL: https://GINC.netspyglass.com/emb_graph.html?update=true&networkId=1&intervalHr=24&width=500&height=300&vars=ifOperStatus.9853.2

我尝试了以下几点:

代码语言:javascript
复制
var body = PD.inputRequest.rawBody;
var cef_event = {
  event_type: PD.Trigger,
  description: body.details.payload.summary,
  cmdb_ci: body.details.payload.cmdb_ci,
  event_action: PD.Trigger,
  details: body.details
}

我得到以下错误:

错误执行转换: TypeError:无法读取未定义

的属性“有效载荷”

EN

回答 2

Stack Overflow用户

发布于 2019-11-07 13:15:50

看起来,JSON的rawBody成员是一个字符串,而不是一个对象,因此您需要执行如下操作:

var body = JSON.parse(PD.inputRequest.rawBody);

在你进入它的成员之前。

目前,您只是将字符串本身分配给body

此外,一旦解析完,JSON对象中与有效载荷相关的键实际上不是子对象,键实际上是字符串,如payload.summary,因此要访问这些字符串,您应该这样做:

body.details['payload.summary']

综合起来,您提供的代码应该更像这样(虽然它没有提供您列出的输出,但我认为您提供的代码之外还有更多的代码):

代码语言:javascript
复制
var body = JSON.parse(PD.inputRequest.rawBody);
var cef_event = {
  event_type: PD.Trigger,
  description: body.details['payload.summary'],
  cmdb_ci: body.details['payload.cmdb_ci'],
  event_action: PD.Trigger,
  details: body.details
}
票数 1
EN

Stack Overflow用户

发布于 2019-11-07 14:17:32

代码语言:javascript
复制
var data = {
  description: "NetSpy Integration",
  event_type: "trigger",
  service_key: "34a9a87f27f6173f",
  details: {
    uri: {
      slashes: true,
      search: "",
      query: {},
      protocol: "http:",
      port: null,
      pathname: "/integration/34a9a87f27f6173f /enqueue",
      path: "/integration/34a9a87f27f6173f /enqueue",
      href: "http://events.pagerduty.com/integration/34a9a87f27f6173f/enqueue",
      hostname: "events.pagerduty.com",
      host: "events.pagerduty.com",
      hash: null,
      auth: null
    },
    rawBody: '{"client_url":"http://GINC-prod-nsg-mon-5:9100/","service_key":"34a9a87f27f6173f ","event_type":"trigger","description":"Interface is down for a viptela router","client":"NetSpyGlassTest","details":{"client":"NSG","client_url":"https://GINC.netspyglass.com/","component":"ge0/1","dedup_key":"$dedupKey","device":"myrtr1","event_action":"trigger","payload.class":"deploy","payload.cmdb_ci":"myrtr1","payload.component":"postgres","payload.custom_details.abc":"123","payload.custom_details.def":"Hi, its Nikita","payload.group":"prod-datapipe","payload.severity":"{}","payload.source":"https://GINC.netspyglass.com/","payload.summary":"Interface is down for a router","payload.timestamp":"","routing_key":"34a9a87f27f6173f ","value":"2.0"},"incident_key":"ViptelaRouterInterfaceDown.9853.2","contexts":[{"href":"http://GINC-prod-nsg-mon-5:9100/","type":"link"},{"src":"https://GINC.netspyglass.com/emb_graph.html?update=true&networkId=1&intervalHr=24&width=500&height=300&vars=ifOperStatus.9853.2","type":"image"}]}',
    method: "POST",
    headers: [{
        "X-Real-IP": "10.16.121.254"
      },
      {
        "X-Forwarded-For": "10.16.121.254"
      },
      {
        Host: "events.pagerduty.com"
      },
      {
        "X-Forwarded-Proto": "https"
      },
      {
        Connection: "close"
      },
      {
        "Content-Length": "1054"
      },
      {
        "User-Agent": "Apache-HttpClient/4.5.2 (Java/11.0.4)"
      },
      {
        "Accept-Encoding": "gzip,deflate"
      },
      {
        "X-PD-Event-Received": "1572013154"
      }
    ],
    body: ""
  }
};
data = JSON.parse(data.details.rawBody);
console.log(data.details["payload.class"]);

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

https://stackoverflow.com/questions/58749161

复制
相关文章

相似问题

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