从Twilio处理json结果

从Twilio处理json结果,twilio,Twilio,我目前以json列的形式从Twilio中检索语音和短信警报。使用这个tsql代码 SELECT [ReceivedDateTime] ,MsgSid = JSON_VALUE(payload, '$.resource_sid') ,WebhookURL = JSON_VALUE(payload, '$.webhook.request.url') ,ToState = JSON_VALUE(payload, '$.webhook.request.parameters.ToState')

我目前以json列的形式从Twilio中检索语音和短信警报。使用这个tsql代码

SELECT [ReceivedDateTime]
  ,MsgSid = JSON_VALUE(payload, '$.resource_sid')
  ,WebhookURL = JSON_VALUE(payload, '$.webhook.request.url')
  ,ToState = JSON_VALUE(payload, '$.webhook.request.parameters.ToState')
  ,AlertTime = JSON_VALUE(payload, '$.webhook.request.parameters.Timestamp')
  ,Direction = JSON_VALUE(payload, '$.webhook.request.parameters.Direction')
  ,SequenceNumber = JSON_VALUE(payload, '$.webhook.request.parameters.SequenceNumber')
  ,ToNumber = JSON_VALUE(payload, '$.webhook.request.parameters.To')
  ,ToCity = JSON_VALUE(payload, '$.webhook.request.parameters.ToCity')
  ,CallStatus = JSON_VALUE(payload, '$.webhook.request.parameters.CallStatus')
  ,FromNumber = JSON_VALUE(payload, '$.webhook.request.parameters.From')
  ,AccountSid = JSON_VALUE(payload, '$.webhook.request.parameters.AccountSid')
  ,TwilioReason = JSON_VALUE(payload, '$.response.headers.X-Twilio-Reason')
  ,AlertDate = JSON_VALUE(payload, '$.webhook.response.headers.Date')
FROM [dbo].[TwilioAlerts]
我可以查询此文件,直到找到名称中包含破折号的部分。试图引入X-Twilio-Reason,我得到了一个错误:JSON路径的格式不正确。在位置20处发现意外字符“-”。我如何在tsql中引用它

这是我试图查询的json:

{
    "resource_sid": "",
    "service_sid": null,
    "error_code": "15003",
    "more_info": {
        "Msg": "HTTP retrieval failure",
        "statusCallback": "",
        "ErrorCode": "15003",
        "LogLevel": "WARN"
    },
    "webhook": {
        "type": "application/json",
        "request": {
            "url": "",
            "method": "POST",
            "headers": {},
            "parameters": {
                "Called": "+",
                "ToState": "TX",
                "CallerCountry": "US",
                "Timestamp": "Fri, 22 Nov 2019 14:33:23 +0000",
                "Direction": "outbound-api",
                "CallbackSource": "call-progress-events",
                "CallerState": "TX",
                "ToZip": "78742",
                "SequenceNumber": "1",
                "CallSid": "",
                "To": "+",
                "CallerZip": "",
                "ToCountry": "US",
                "CalledZip": "",
                "ApiVersion": "2010-04-01",
                "CalledCity": "",
                "CallStatus": "ringing",
                "From": "+",
                "AccountSid": "",
                "CalledCountry": "US",
                "CallerCity": "",
                "ToCity": "AUSTIN",
                "Caller": "+",
                "FromCountry": "US",
                "FromCity": "",
                "CalledState": "TX",
                "FromZip": "",
                "FromState": "TX"
            }
        },
        "response": {
            "status_code": null,
            "headers": {
                "X-Twilio-WebhookAttempt": "1",
                "X-Twilio-Reason": "Response does not contain content type",
                "Content-Length": "464",
                "Date": "Fri, 22 Nov 2019 14:33:23 GMT",
                "Content-Type": "text/html"
            },
            "body":"Twilio was unable to fetch content from: https://appointmentwave.com/ProdAWHandler/events/voice\nError: Error reading response: Response does not contain content type\nAccount SID: ACc9eea08b61d774d5dfc07c91aa690466\nSID: CA6e2b878c4e1e5d2ec3733d52b2c2b2fa\nRequest ID: 6ae4e44b-f6cb-4ca3-a057-6067024f943a\nRemote Host: appointmentwave.com\nRequest Method: POST\nRequest URI: https://appointmentwave.com/ProdAWHandler/events/voice\nSSL 
Version: TLSv1.2\nURL Fragment: true"}}}

有关如何提取“X-Twilio-Reason”的任何答案?

请尝试在名称中带破折号的部分周围添加双引号

,TwilioReason = JSON_VALUE(payload, '$.response.headers."X-Twilio-Reason"')

这不会抛出一个错误,但它只是拉入NULL