首页 > 解决方案 > PHP 在 JSON 上抛出 JSON_ERROR_STATE_MISMATCH,检查每个在线验证器是否有效

问题描述

我正在尝试使用 PHP 解析 GeoJSON 文件,但出现 JSON_ERROR_STATE_MISMATCH 错误。

除了 - 我尝试过的每个在线 linter 和验证器都告诉我该文件实际上是一个有效的 JSON 文件。

这是一个巨大的文件,所以我不能完全发布它,但它本质上是:

{ "type": "FeatureCollection", "features": [
{
   "type": "Feature",
   "geometry": { "type": "Polygon", "coordinates": [[[-8.1675,43.3665],[-8.613000000000001,43.3665],[-9.603,44.504999999999995],[-12.078,50.742000000000004],[-11.5335,51.5835],[-11.5335,51.5835],[-11.4345,51.633],[-11.335500000000001,51.633],[-8.118,44.109],[-8.118,43.416],[-8.1675,43.3665]]] },
   "properties": {
      "id": "87",
      "height": "-990",
      "biome": "0"
   }
},
... 2 MB of geodata...
{
   "type": "Feature",
   "geometry": { "type": "Polygon", "coordinates": [[[7.8210000000000015,34.2585],[7.8210000000000015,34.4565],[8.315999999999999,34.6545],[8.3655,34.6545],[8.563500000000001,34.308],[8.019000000000002,34.060500000000005],[7.8705,34.159499999999994],[7.8210000000000015,34.2585]]] },
   "properties": {
      "id": "1493",
      "height": "-990",
      "biome": "11",
      "population": "0"
   }
}
]}

为什么 PHP 不同意其他人,我该如何解决(我的 JSON 或 PHP)?

我制作简化代码只是为了确保我的代码不是问题:

$cells = json_decode(file_get_contents($argv[1]), true);
echo "error: ".json_last_error_msg()."\n";
print_r($cells);

这对我有帮助。我确认该file_get_contents()调用确实获得了正确的文件数据。

我还发现 PHP 代码在极其简化的数据(例如上面的两个功能)上有效。由于所有数据都是从完全相同的代码生成的,并且它可以正确加载到我拥有的每个 GeoJSON 工具中,所以我不认为某处隐藏了无效的数据片段。庞大的数据量会成为问题吗?

标签: phpjsongeojsonphp-7

解决方案


推荐阅读