有一个奇怪的行为json_encode
和json_decode
我不能找到一个解决方案:
我的php应用程序调用php Web服务.webservice返回如下所示的json:
var_dump($foo):
string(62) "{"action":"set","user":"123123123123","status":"OK"}"
Run Code Online (Sandbox Code Playgroud)
现在我想在我的应用程序中解码json:
$data = json_decode($foo, true)
Run Code Online (Sandbox Code Playgroud)
但它返回NULL
:
var_dump($data):
NULL
Run Code Online (Sandbox Code Playgroud)
我用的是php5.来自webservice的响应的Content-Type :( "text/html; charset=utf-8"
也尝试使用"application/json; charset=utf-8"
)
可能是什么原因?
Pab*_*blo 75
好吧,我有一个类似的问题,问题是服务器中的PHP魔术引号......这是我的解决方案:
if(get_magic_quotes_gpc()){
$param = stripslashes($_POST['param']);
}else{
$param = $_POST['param'];
}
$param = json_decode($param,true);
Run Code Online (Sandbox Code Playgroud)
Ste*_*rig 64
编辑:
刚刚对OP提供的字符串进行了一些快速检查.花括号前面的小"字符"是UTF-8 B(yte)O(rder)M(方舟) 0xEF 0xBB 0xBF
.我不知道为什么这个字节序列显示在?
这里.
基本上,您从中获取数据的系统会以UTF-8编码,并在数据之前使用BOM.你应该先把它从字符串中删除前三个字节,然后再把它扔进去json_decode()
(a substr($string, 3)
会做).
string(62) "?{"action":"set","user":"123123123123","status":"OK"}"
^
|
This is the UTF-8 BOM
Run Code Online (Sandbox Code Playgroud)
正如Kuroki Kaze所发现的,这个角色肯定是json_decode
失败的原因.给定形式的字符串不是正确的JSON格式结构(请参阅RFC 4627)
小智 33
调试时打印最后一个json错误.
json_decode( $so, true, 9 ); $json_errors = array( JSON_ERROR_NONE => 'No error has occurred', JSON_ERROR_DEPTH => 'The maximum stack depth has been exceeded', JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded', JSON_ERROR_SYNTAX => 'Syntax error', ); echo 'Last error : ', $json_errors[json_last_error()], PHP_EOL, PHP_EOL;还可以使用json.stringify()函数来仔细检查您的JSON语法.
djb*_*djb 28
上面的解决方案都没有为我工作,但是html_entity_decode($json_string)
做到了
Óla*_*age 19
试试这个
$foo = utf8_encode($foo);
$data = json_decode($foo, true);
Run Code Online (Sandbox Code Playgroud)
确保如果您通过POST/GET发送数据,则服务器无法转义引号
$my_array = json_decode(str_replace ('\"','"', $json_string), true);
Run Code Online (Sandbox Code Playgroud)
"?{"action":"set","user":"123123123123","status":"OK"}"
Run Code Online (Sandbox Code Playgroud)
这个小撇号一开始 - 它是什么?双引号后的第一个符号.
小智 5
我只是把这个
$result = mb_convert_encoding($result,'UTF-8','UTF-8');
$result = json_decode($result);
Run Code Online (Sandbox Code Playgroud)
它正在工作
归档时间: |
|
查看次数: |
100628 次 |
最近记录: |