PHP JSON 解码与反序列化


PHP JSON Decode versus unserialize

我从geoPlugin http://www.geoplugin.net/json.gp?ip=64.90.182.55 中得到了以下结果:

geoPlugin({
  "geoplugin_request":"64.90.182.55",
  "geoplugin_status":200,
  "geoplugin_city":"New York",
  "geoplugin_region":"NY",
  "geoplugin_areaCode":212,
  "geoplugin_dmaCode":501,
  "geoplugin_countryCode":"US",
  "geoplugin_countryName":"United States",
  "geoplugin_continentCode":"NA",
  "geoplugin_latitude":40.70890045166,
  "geoplugin_longitude":-74.001197814941,
  "geoplugin_regionCode":"NY",
  "geoplugin_regionName":"New York",
  "geoplugin_currencyCode":"USD",
  "geoplugin_currencySymbol":"$",
  "geoplugin_currencyConverter":1
})

有没有办法将其转换为PHP数组?我不想使用 geoPlugin 的 PHP API,因为我似乎需要使用 unserialize ,它会在我的开发服务器上产生E_WARNING(在生产中禁止显示警告)。如果可以的话,我宁愿不必处理E_WARNINGs。json_decode 不会在出错时产生E_WARNING,但它不会将上述输出视为有效。

思潮?

您可以尝试删除围绕 JSON 的geoPlugin(),然后 PHP 的 API 应该可以工作了。

您可以使用 str_replace 和 substr 将其删除。

一个例子是:

$json = str_replace("geoPlugin(", "", $original_json);
$json = substr($json, 0, -1);
$data = json_decode($json);

正如你可以很容易地用jsonlint(demo)验证的那样,你提供的json字符串是无效的:

Parse error on line 1:
geoPlugin({    "geo
^
Expecting '{', '['

您应该向您使用的 Web 服务报告此问题,因为它不是 JSON,因此这被称为 JSON API 看起来具有误导性。

此外,您希望 PHP json_decode 函数使用非 json 字符串也是误导性的。

请参阅 http://json.org 以了解有关 JSON 的更多信息。

但除此之外,你写道你已经有了解决方案,你只是想知道。我希望这个答案实际上回答了你(隐藏的)问题,为什么这不起作用。

下次你应该更直接地问你要找什么;)希望这是有帮助的。