我从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 的更多信息。
但除此之外,你写道你已经有了解决方案,你只是想知道。我希望这个答案实际上回答了你(隐藏的)问题,为什么这不起作用。
下次你应该更直接地问你要找什么;)希望这是有帮助的。