我试图解码我用jsonlint检查的以下json并返回它是一个有效的json:
[{" gatewayId":" 5154979870408704"," sensorId":" 5698497110081536"},{" timestamp&#34 ;:" 20160513T225959000Z"," tagId":" 123456789AB1"," io":" in"},{& #34; timestamp":" 20160513T235959000Z"," tagId":" 123456789AB2"," io":" out&# 34;}]
但是当我调用json_last_error_msg()时,结果总是语法错误 这是我的代码:
$param = substr($HTTP_RAW_POST_DATA, 1);
$param =utf8_encode($param);
$json = json_decode($param,true);
echo json_last_error_msg();
var_dump($param);
json正在使用curl发送给我,这就是为什么它在$ HTTP_RAW_POST_DATA中,并且我删除了第一个字符,因为在创建var_dump时我注意到那里有一个空白字符,但是那不是问题。任何帮助表示赞赏。 修改 这是var_dump($ HTTP_RAW_POST_DATA)
的结果string(187)" [{gatewayId:5154979870408704,sensorId:5698497110081536},{timestamp:20160513T225959000Z,tagId:123456789AB1,io:in},{timestamp:20160513T235959000Z,tagId:123456789AB2,io:out}]"
EDIT2: 事实证明,这是因为在具有有效载荷的卷曲请求中删除了双引号
-d "[{"gatewayId": "5154979870408704", "sensorId": "5698497110081536"}, {"timestamp": "20160513T225959000Z", "tagId": "123456789AB1", "io": "in"}, {"timestamp": "20160513T235959000Z", "tagId": "123456789AB2", "io": "out"}]"
我在有效负载的开头和结尾用单引号替换双引号,现在它工作正常,只是留下这个以防万一有人有同样的问题。 新的有效载荷:
-d '[{"gatewayId": "5154979870408704", "sensorId": "5698497110081536"}, {"timestamp": "20160513T225959000Z", "tagId": "123456789AB1", "io": "in"}, {"timestamp": "20160513T235959000Z", "tagId": "123456789AB2", "io": "out"}]'
谢谢!
答案 0 :(得分:0)
在var_dump
我读过
string(187) " [{gatewayId: 5154979870408704, ...
此处未引用密钥gatewayId
。 JSON standard要求密钥为使用""
的字符串。因此数据无效JSON,PHP拒绝它。