我如何json_decode()这个?

时间:2016-04-08 06:21:18

标签: php json

json_decode()如何file_get_contents结果?

这是我的代码。

$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'];

结果在这里

  

check1
  串(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 “:” ABrQBFdlHzed4sc.aHygqG0faENua5L865UMVglio2hkbIJAnbY - “}”


'check1'在那里,令牌值是var_dump($resp);的结果,但是'check2'无效。
所以我认为$json = json_decode($resp);失败了。

如何解码?

感谢。

1 个答案:

答案 0 :(得分:1)

这是编码问题。您的回复中BOM var_dump未显示,json_encode未对其进行妥善处理。

如果您尝试下一步:

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

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

您将得到与您的回复完全相同的结果。

您可以使用标题来确保在请求期间使用utf-8编码,或者您可以通过以下方式删除BOM

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