-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配列に変換する方法はありますか? 開発サーバーでE_WARNINGunserializeを生成する . できれば E_WARNING に対処する必要はありません。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 '{', '['

これは JSON ではないため、JSON API と呼ばれると誤解を招くように見えるため、使用している Web サービスに報告する必要があります。

json_decodeまた、PHP関数が json 以外の文字列で動作することを期待するのは誤解を招きます。

json の詳細については、 http://json.orgを参照してください。

しかし、これらすべてに加えて、あなたはすでに解決策を持っていると書いており、ただ疑問に思っているだけです。この回答が、なぜそれがうまくいかないのかという(隠された)質問に実際に答えてくれることを願っています。

次回は、探しているものをもっと直接尋ねる必要があります ;) これが役に立てば幸いです。

于 2012-06-07T11:07:39.597 に答える