-1

我从 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,但它不会将上述输出视为有效。

想法?

4

2 回答 2

2

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

您可以使用str_replacesubstr将其删除。

一个例子是:

$json = str_replace("geoPlugin(", "", $original_json);
$json = substr($json, 0, -1);
$data = json_decode($json);
于 2012-06-07T07:37:05.107 回答
0

正如您可以使用jsonlint (demo)轻松验证的那样,您提供的 json 字符串无效:

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

您应该将此报告给您使用的 Web 服务,因为它不是 JSON,因此它看起来会误导您将其称为 JSON API。

此外,您希望 PHPjson_decode函数使用非 json 字符串也是一种误导。

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

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

下次您应该更直接地询问您在寻找什么;)希望这会有所帮助。

于 2012-06-07T11:07:39.597 回答