2016-04-08 15 views
0

Wie kann ich json_decode() Ergebnis von file_get_contents?

Wie mache ich json_decode() das?

Hier ist mein 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']; 

Das Ergebnis hier ist

check1
string (744) "{" access_token ":" j9MqiEM.lKjepCGMFdKufPw1UBK_gAlG6qFxvMxHJwbopXfo9LpLUyT1z.YxwFBSydvVSMOqzVI4fX_ZVLVROlNf7ARr08s2tkFMb5_TNq.wp1MmoQm3wJaqF9gxpeQbEz4GYuGJSbDKJTw8LA_XoBNcEbL0ZDeozFEgYxII8gqi_Nfi7UhM5bd7gqV6Sp17rCECQAauZj_jJa6jyADS3me3UYxIKJB2tCJpRM.xCzVhjRWEZPqNiUI5NikXRANrSiTyn_6Z72u2ptW3vnK918TqpPBAdj.P1O5uJAZgKEmLMZLSBEIWIEOUPTJaSvI3qxxk1ItXI_5sZDAQuw.86R3eaSIolGHqWTvpLk3WqnqBvtk6w6qIVcZgJrTFxnjx_x1ijJhKACcnY.jYp6kpxMihe8hOrTEyVj4Swhmq4RUWDhAfIQDNNju5dJCqW82QyYNCQdf 0IMW7uIRSvHK1FmTGrEWMv4tpojLtJEf5vnKaDbrxZ0.AB9OSRwhzMkUYkgbiEVCwqyxCy_oEQBB0uVuAL8fOYidPrqv8m.A29j7S9d3Cb7DFh7pQJJGkLzljcC4VkEZADLiPnq_aLZuy0ehb_aTLBoHZ0IUL " "token_type": "bearer", "expires_in": "3600", "refresh_token": "ABrQBFdlHzed4sc.aHygqG0faENua5L865UMVglio2hkbIJAnbY-"}"


'Check1' besteht und Token Wert ist das Ergebnis von var_dump($resp); aber 'check2' funktioniert nicht.
Also ich denke, $json = json_decode($resp); ist fehlgeschlagen.

Wie dekodiere ich das?

Danke.

+0

Haben Sie eine Fehlermeldung erhalten? oder können Sie nicht auf '$ json ['access_token']' zugreifen, dann müssen Sie true hinzufügen, um ein Array zurückzubekommen und nicht ein Objekt '$ json = json_decode ($ resp, true);' –

+0

Es sollte '$ sein json-> access_token' – aldrin27

+0

@PhillipBartschinski Hallo, es gibt keine Fehlermeldung. Nur das Ergebnis. –

Antwort

1

Dies ist ein Codierungsproblem. Sie haben BOM in Ihrer Antwort, die nicht von var_dump angezeigt wird, aber nicht ordnungsgemäß von json_encode behandelt wird.

Wenn Sie versuchen, als nächstes zu tun:

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

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

Sie werden genau das gleiche Ergebnis wie in Ihrer Antwort.

Sie können mit Header spielen, um sicherzustellen, dass Sie utf-8 Codierung während Anforderung verwenden, oder Sie können von BOM durch loszuwerden:

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