json_decode返回" NULL"帮我

时间:2014-10-27 02:21:49

标签: php json

我得到了json字符串:

$response = '{"retcode":"0","retmsg":"OK","cre_id_enc":"","cre_type":"","fee_type":"1","listid":"1221085301201410240000001024","out_trade_no":"201410246763831","partner":"1221085301","pay_fee":"0","sign":"PTamau\x2BjkynA00cASKJ6Nd3QwFSBP44TKSqmmdCd\x2F\x2B0o8ViSt3fp5vQr0Fc73U42NhtImfnHzbynoUjURiNLW5O4hI61xkG\x2F97JRPRE0nHuvtAumqXfbVCsLveugE52HRZsJvm3EG7pL6GlhYf8ng6qxiUrDyn89PFVZ04Wd8Gk\x3D","total_fee":"1000000","unfreeze_fee":"1000000","user_name_enc":""}';

我使用json_decode将此字符串转换为数组,但它返回“NULL”。 我发现"sign":"PTamau\x2BjkynA00cASKJ6Nd3QwFSBP44TKSqmmdCd\x2F\x2B0o8ViSt3fp5vQr0Fc73U42NhtImfnHzbynoUjURiNLW5O4hI61xkG\x2F97JRPRE0nHuvtAumqXfbVCsLveugE52HRZsJvm3EG7pL6GlhYf8ng6qxiUrDyn89PFVZ04Wd8Gk\x3D","total_fee":"1000000"不能使用json_decode。 它包含ASCII代码,如'\ x2F','\ x2B','\ x3D'。 所以我尝试转换为utf8,就像这个$response = iconv('ASCII', 'UTF-8//IGNORE', $response);一样。 它没用。响应字符串仍包含'\x2F' , '\x2B', '\x3D'json_decode仍然返回NULL。

有人可以帮助我,原谅我英语不好! 谢谢!

2 个答案:

答案 0 :(得分:1)

根据非常similar question的答案,你需要逃避反斜杠:

$json = str_replace( '\x', '\\\\x', $response );

然后将$ json传递给json_decode

答案 1 :(得分:0)

问题是单引号。

print_r('\x2F');
\x2F
print_r("\x2F");
/

单引号不会解释反斜杠序列,这会留下格式错误的JSON,只允许\\\",AFAIK。如果你已经有了单反斜杠字符串,请执行Vasilis所说的内容。