作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试从这个 link 加载和解析 JSON 文件
但我有 JSON_ERROR_SYNTAX
问题和为 foreach()
提供的参数无效。为什么会这样?
[{ "Manufacturer": "Toyota", "Sold": 1200, "Month": "2012-11" }, { "Manufacturer": "Ford", "Sold": 1100, "Month": "2012-11" }, { "Manufacturer": "BMW", "Sold": 900, "Month": "2012-11" }, { "Manufacturer": "Benz", "Sold": 600, "Month": "2012-11" }, { "Manufacturer": "GMC", "Sold": 500, "Month": "2012-11" }, { "Manufacturer": "HUMMER", "Sold": 120, "Month": "2012-11" }]
<?php
$url = "http://www.pureexample.com/backend/data/car-sale.json";
$url = file_get_contents($url);
print_r($url);
$url = stripslashes($url);
print_r($url);
$url = str_replace("\n", "", $url);
print_r($url);
$url = iconv('UTF-8', 'UTF-8//IGNORE', utf8_encode($url));
print_r($url);
$url = json_decode($url, true);
// Add this switch to your code
switch (json_last_error())
{
case JSON_ERROR_NONE:
echo ' - No errors';
break;
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
echo ' - Unknown error';
break;
}
foreach($koyim as $data){
echo $data['Manufacturer'];
echo $data['Sold'];
echo $data['Month'];
echo "<br/>";
}
?>
最佳答案
link您提供的 JSON 以 UTF-8 格式提供,并带有字节顺序标记。显然 json_decode()
不能很好地处理这三个无关字符。解决方案是剥离 BOM:
<?php
//see https://stackoverflow.com/a/32185872/500890
function removeBomUtf8($s){
if(substr($s,0,3)==chr(hexdec('EF')).chr(hexdec('BB')).chr(hexdec('BF'))){
return substr($s,3);
}else{
return $s;
}
}
$url = "http://www.pureexample.com/backend/data/car-sale.json";
$content = file_get_contents($url);
$clean_content = removeBomUtf8($content);
$decoded = json_decode($clean_content);
//Recovered data
echo "<pre>" . print_r($decoded, TRUE);
我采用此解决方案剥离 BOM:https://stackoverflow.com/a/32185872/500890 ,尽管互联网上流传着大量此类内容。主要思想是去除前三个特定字符,如果它们确实是 BOM。
关于PHP json_解码 JSON_ERROR_SYNTAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46351165/
我必须使用文件将一个大数组从一台服务器传输到另一台服务器。这是一个多维但非常简单的数组。现在我正在寻找最有效的方法,将这个文件放入我在第二台服务器上的应用程序中。所以这个问题是关于文件->数组部分,而
我是一名优秀的程序员,十分优秀!