简体   繁体   English

我该如何json_decode()?

[英]How do I json_decode() this?

How can I json_decode() result of file_get_contents ? 我如何json_decode() file_get_contents结果?

Here is my code. 这是我的代码。

$resp = file_get_contents('https://auth.login.yahoo.co.jp/yconnect/v1/token', false, $context);

echo "check1 <br />";
var_dump($resp);

$json = json_decode($resp);

echo "check2 <br />";
var_dump($json);
echo $json['access_token'];

The result is here 结果在这里

check1 检查1
string(744) "{"access_token":"j9MqiEM.lKjepCGMFdKufPw1UBK_gAlG6qFxvMxHJwbopXfo9LpLUyT1z.YxwFBSydvVSMOqzVI4fX_ZVLVROlNf7ARr08s2tkFMb5_TNq.wp1MmoQm3wJaqF9gxpeQbEz4GYuGJSbDKJTw8LA_XoBNcEbL0ZDeozFEgYxII8gqi_Nfi7UhM5bd7gqV6Sp17rCECQAauZj_jJa6jyADS3me3UYxIKJB2tCJpRM.xCzVhjRWEZPqNiUI5NikXRANrSiTyn_6Z72u2ptW3vnK918TqpPBAdj.P1O5uJAZgKEmLMZLSBEIWIEOUPTJaSvI3qxxk1ItXI_5sZDAQuw.86R3eaSIolGHqWTvpLk3WqnqBvtk6w6qIVcZgJrTFxnjx_x1ijJhKACcnY.jYp6kpxMihe8hOrTEyVj4Swhmq4RUWDhAfIQDNNju5dJCqW82QyYNCQdf0IMW7uIRSvHK1FmTGrEWMv4tpojLtJEf5vnKaDbrxZ0.AB9OSRwhzMkUYkgbiEVCwqyxCy_oEQBB0uVuAL8fOYidPrqv8m.A29j7S9d3Cb7DFh7pQJJGkLzljcC4VkEZADLiPnq_aLZuy0ehb_aTLBoHZ0IUL","token_type":"bearer","expires_in":"3600","refresh_token":"ABrQBFdlHzed4sc.aHygqG0faENua5L865UMVglio2hkbIJAnbY-"}" 串(744) “{” 的access_token “:” j9MqiEM.lKjepCGMFdKufPw1UBK_gAlG6qFxvMxHJwbopXfo9LpLUyT1z.YxwFBSydvVSMOqzVI4fX_ZVLVROlNf7ARr08s2tkFMb5_TNq.wp1MmoQm3wJaqF9gxpeQbEz4GYuGJSbDKJTw8LA_XoBNcEbL0ZDeozFEgYxII8gqi_Nfi7UhM5bd7gqV6Sp17rCECQAauZj_jJa6jyADS3me3UYxIKJB2tCJpRM.xCzVhjRWEZPqNiUI5NikXRANrSiTyn_6Z72u2ptW3vnK918TqpPBAdj.P1O5uJAZgKEmLMZLSBEIWIEOUPTJaSvI3qxxk1ItXI_5sZDAQuw.86R3eaSIolGHqWTvpLk3WqnqBvtk6w6qIVcZgJrTFxnjx_x1ijJhKACcnY.jYp6kpxMihe8hOrTEyVj4Swhmq4RUWDhAfIQDNNju5dJCqW82QyYNCQdf0IMW7uIRSvHK1FmTGrEWMv4tpojLtJEf5vnKaDbrxZ0.AB9OSRwhzMkUYkgbiEVCwqyxCy_oEQBB0uVuAL8fOYidPrqv8m.A29j7S9d3Cb7DFh7pQJJGkLzljcC4VkEZADLiPnq_aLZuy0ehb_aTLBoHZ0IUL “ ”token_type“: ”承载“, ”expires_in“: ”3600“,” refresh_token “:”“ ABrQBFdlHzeded4sc.aHygqG0faENua5L865UMVglio2hkbIJAnbY-”}“


'check1' is there and token value is result of var_dump($resp); 'check1'存在,令牌值是var_dump($resp); but 'check2' not working. “ check2”不起作用。
So I think $json = json_decode($resp); 所以我认为$json = json_decode($resp); is fail. 是失败的。

How do I decode this? 我该如何解码?

Thanks. 谢谢。

This is encoding issue. 这是编码问题。 You have BOM in your response that is not shown by var_dump but is not properly treated by json_encode . 您的响应中包含BOM ,但var_dump未显示BOM ,但json_encode未正确处理。

If you try to do next: 如果您尝试下一步:

$s = "\xEF\xBB\xBF".'{"access_token":"j9MqiEM.lKjepCGMFdKufPw1UBK_gAlG6qFxvMxHJwbopXfo9LpLUyT1z.YxwFBSydvVSMOqzVI4fX_ZVLVROlNf7ARr08s2tkFMb5_TNq.wp1MmoQm3wJaqF9gxpeQbEz4GYuGJSbDKJTw8LA_XoBNcE$

var_dump($s);
var_dump(json_decode($s));

You will get exact same result as in your response. 您将获得与响应完全相同的结果。

You can play around with headers to make sure that you are using utf-8 encoding during request or you can get rid of BOM by: 您可以使用标头来确保在请求期间使用utf-8编码,也可以通过以下方法摆脱BOM

$bomBinString = pack('H*','EFBBBF');
$s = preg_replace("/^$bomBinString/", '', $s);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM