PHP json_在包含另一个jsonstring的jsonstring上解码
我正在为我们的软件开发一个日志工具,我遇到了一个json_解码返回null的问题,我希望得到一些帮助 json对象如下所示:PHP json_在包含另一个jsonstring的jsonstring上解码,php,json,Php,Json,我正在为我们的软件开发一个日志工具,我遇到了一个json_解码返回null的问题,我希望得到一些帮助 json对象如下所示: { 'id': 'string', 'request': { 'headers': { ... }, 'body': 'jsonstring' }, 'response' { ... }, } 问题在于请求->身体部位。由于它是一个json对象
{
'id': 'string',
'request': {
'headers': {
...
},
'body': 'jsonstring'
},
'response' {
...
},
}
问题在于请求->身体部位。由于它是一个json对象,但保存为一个带引号的字符串,因此它似乎会弄乱json_decode函数,并返回null
编辑日志条目以删除请求中主体jsonstring周围的引号可以使其通过,但这就是它的日志记录方式,我并不期待可能需要重写日志记录代码。因此,在这一点上,任何帮助都是非常受欢迎的
编辑正在使用的真实JsonString。但是删除了身份验证和URL
{
"payment_id": "1",
"type": "post",
"title": "Create Order",
"request": {
"headers": {
"Content-type": "application/json",
"Accept": "application/json",
"Authorization": "string"
},
"method": "POST",
"body": "{
"order": {
"items": [{
"reference": "8",
"name": "Test Product",
"quantity": 2,
"unit": "pcs",
"unitPrice": 12500,
"taxRate": 2500,
"taxAmount": 5000,
"grossTotalAmount": 25000,
"netTotalAmount": 20000
}, {
"reference": "test",
"name": "Test",
"quantity": 1,
"unit": "pcs",
"unitPrice": 20000,
"taxRate": 2500,
"taxAmount": 5000,
"grossTotalAmount": 25000,
"netTotalAmount": 15000
}, {
"reference": "1",
"name": "Flat rate",
"quantity": 1,
"unit": "pcs",
"unitPrice": 6125,
"taxRate": 2500,
"taxAmount": 1225,
"grossTotalAmount": 6125,
"netTotalAmount": 4900
}],
"amount": 56125,
"currency": "SEK",
"shipping": {
"costSpecified": true
}
},
"checkout": {
"url": "",
"termsUrl": "",
"shipping": {
"countries": [],
"merchantHandlesShippingCost": true
},
"consumerType": {
"supportedTypes": ["B2C"]
}
},
"notifications": {
"webHooks": [{
"eventName": "payment.reservation.created",
"url": "",
"authorization": ""
}]
}
}"
},
"response": {
"headers": {},
"body": {
"errors": {
"notifications.WebHooks[0].Url": ["Field is not accepted as a valid URL"]
}
},
"response": {
"code": 400,
"message": "Bad Request"
},
"cookies": [{
"name": "visid_incap_1152497",
"value": "2qY5gE/QT6W4CmOH1cLUuig yFsAAAAAQUIPAAAAAABsjnmr3oFW5wXzhutW3EWq",
"expires": 1571353603,
"path": "/",
"domain": "api.dibspayment.eu"
}, {
"name": "incap_ses_273_1152497",
"value": "hXtkOPG/TwEHQCnMhuTJAyg yFsAAAAALrqG9pupkT/7iEMdOohRTw==",
"expires": null,
"path": "/",
"domain": "api.dibspayment.eu"
}],
"filename": null,
"http_response": {
"data": null,
"headers": null,
"status": null
}
}
}
使用jsonlint.com或类似的检查语法,如果json_decode返回null,那是因为无论您输入什么,它都不是有效的json。Protip,将数据解析为一个普通的php数组,并在最后对其进行json_编码。如果有传入的json数据,请使用
json_decode($json, true);
将其作为数组与对象进行处理。只使用数组并在事后对其进行enocde要容易得多
编辑:
"body": "{
是您的问题在看到完整字符串时,您在请求中的body对象之前添加了一个。在一个linter中解析它,它是一个无效的json对象,多亏了否决这个答案的人,自己去lint它:P这不是一个有效的json字符串!JSON坚持使用双引号表示开始,所以一旦你对外部JSON字符串进行JSON解码,你就必须将JSON的内部片段作为一个单独的进程进行JSON解码使用jsonlint.com或类似的检查语法,上面的帖子是正确的,这是无效的JSONTH是真的,我道歉。我只是更习惯于用单引号来写作,并在撰写文章时使用单引号。这也是json字符串的一个截断版本,因为真正的字符串非常长,并且这个问题不需要大部分数据。但是你对如何解决我所问的问题有什么想法吗?@riggsfully但是在外部字符串上运行任何json_解码都会导致空返回,除非我删除内部字符串周围的注释。我怎样才能在外面运行它呢?谢谢你的回复。我们尽可能长时间地使用普通PHP数组。用于请求的函数使用用于请求的PHP数组,但是发送到API的主体需要是json字符串。这就是为什么在PHP数组中,我们将body设置为:$request['body]=json\u encode$request\u body;不幸的是,没有重写代码的某些部分,这就是它记录的格式。但是,如果没有办法绕过它,那么就需要像这样进行重写;应该把它解析成一个合适的json对象…,在上面编辑是的,我知道这就是问题所在,正如我在第一篇文章中提到的。但是你知道有什么办法可以解决这个问题吗?没有对代码进行大的重写,即:您使用什么来创建请求对象?看起来它不希望请求主体使用字符串,而是实际的object.Im,它使用一个函数返回一个包含头、方法和主体的PHP数组。只需将body设置为'body'=>json\u encode$this->request\u body,request\u body返回一个PHP数组。我不会手动添加任何引号。