需要帮助来解析来自JSON中以下Raw输入的数据

时间:2019-11-07 12:51:15

标签: javascript json

function getNames() {
  return ['Jack', 'Jane'];
}

以上数据需要解析为如下所示:

{
  "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": ""
  }
}

我尝试了以下操作:

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

我收到以下错误:

  

执行转换时出错:TypeError:无法读取未定义的属性'payload'

2 个答案:

答案 0 :(得分:0)

您的JSON的rawBody成员似乎是字符串,而不是对象,因此您需要执行以下操作:

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

在访问其成员之前。

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

此外,解析后,与有效负载相关的JSON对象中的键实际上不是子对象,这些键实际上是像payload.summary之类的字符串,因此要访问那些

body.details['payload.summary']

将所有内容放在一起,您提供的代码应该更像这样(尽管它不提供您列出的输出,但我认为除了您提供的代码之外,还有更多其他事情要做):

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 :(得分:0)

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"]);