json_decode($ data,true);不起作用

时间:2013-04-04 12:35:27

标签: php json

我正在尝试通过Google财经访问股票行情

通过这样做:

$quote = file_get_contents('http://finance.google.com/finance/info?client=ig&q=VSE:APG1L'); 
$json = str_replace("\n", "", $quote);
$data = substr($json, 4, strlen($json) -5);
print_r($data);  
$json_output = json_decode($data, true);
print_r($json_output);  
echo "\n".$json_output['l']; 

json_decode假设给我一个包含键和值的普通数组,但它没有。

2 个答案:

答案 0 :(得分:2)

如果您在尝试json_last_error()后查看json_decode(),则会看到您正在获取:

JSON_ERROR_UTF8 Malformed UTF-8 characters, possibly incorrectly encoded

试试这个:

$quote = file_get_contents('http://finance.google.com/finance/info?client=ig&q=VSE:APG1L');
$json = substr($quote, 4, -5);
$json_output = json_decode($json, true, JSON_UNESCAPED_UNICODE);
print_r($json_output);

请参阅:http://3v4l.org/jkInl

请注意,JSON_UNESCAPED_UNICODE仅适用于php 5.4

另一种选择是......

$quote = utf8_decode($quote);

...你拿到它之后。这会将欧元符号转换为?字符。可能不是你想要的,但至少你得到json_decode给你返回一个数组。

更新:有关详细信息,请参阅此处:

PHP decoding and encoding json with unicode characters

答案 1 :(得分:0)

另一种解决方案是“手动”将的所有实例替换为\u20AC(这是欧元符号的unicode字符点)。

$quote = file_get_contents('http://finance.google.com/finance/info?client=ig&q=VSE:APG1L');
$quote = str_replace(chr(128), '\u20AC', $quote);
$json = substr($quote, 6, -3); // remove unnecessary '// [ … ]'
$json_output = json_decode($json, true);
print_r($json_output);