json_decode戻り値がどうしてもNULL
json_decodeで戻り値がnullになり、どうも先に進めませんので、どちら様か叱咤・ご教示ください。
google maps api を利用して、住所(本来は日本語文字列住所)からジオコーディングして座標を取得し、google-map 上にプロットするようなロジックを考えておりましたが、住所からの座標変換が出来ずに困っております。
Aの部分はたぶん問題なさそうです。
理由としては、そこにあるURL文字列を直打ちした際にできる jsonファイルを保存し、その中身をみると、希望通りの座標データを含む住所データが格納されていました。
Bの部分でそれを取り出したいのですが、文字化けや妙なエラーになるのならまだしも、何もエラーにならず、しかしながら戻り値が何も入っていないように見受けられます。
このような現象をググったところ、よくありがちな現象ではあるそうですが、UTF8に気をつけなさいとか、UTF8にエンコーディングしなさいとか、DOMがどうだとか、いろいろ試行錯誤しましたが、いずれもNULLで返ってきます。
サーバは外部のレンタルサーバ(firstserver)
PHP Version 5.3.19 DSO版
Apache2.2系
と記載がありましたので、その通りだと思われます。
何か根本的に間違っているのでしょうか。
その根本が分かっていないのは自他ともに認めるところではありますが、どちら様か、何かご存知でしたら、是非ご教示くださいませ。
------ 問題のソース -----
<?php
//header("Content-type: text/html; charset=utf-8");
$address = 'tokyo';
//A
$geocode=file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.urlencode($address).'&sensor=false');
//B
$output= json_decode($geocode);
//ここでjson_last_error()を確認したが、ここではエラーは一切出ない
if($output==NULL){
print("null<br>");
exit;
}
$lat = $output->results[0]->geometry->location->lat;
$lng = $output->results[0]->geometry->location->lng;
echo $lat.','.$lng;
?>
------------
表示結果
output:[]
null
上記URLを直打ちした際に出来たjsonファイル(参考)
***********************
{
"results" : [
{
"address_components" : [
{
"long_name" : "東京駅",
"short_name" : "東京駅",
"types" : [ "train_station", "transit_station", "establishment" ]
},
{
"long_name" : "東京都",
"short_name" : "東京都",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "日本",
"short_name" : "JP",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "日本, 東京駅(東京)",
"geometry" : {
"location" : {
"lat" : 35.681382,
"lng" : 139.766084
},
"location_type" : "APPROXIMATE",
"viewport" : {
"northeast" : {
"lat" : 35.6827309802915,
"lng" : 139.7674329802915
},
"southwest" : {
"lat" : 35.6800330197085,
"lng" : 139.7647350197085
}
}
},
"place_id" : "ChIJC3Cf2PuLGGARxuYMi4MlMEQ",
"types" : [ "train_station", "transit_station", "establishment" ]
}
],
"status" : "OK"
}
***********************
お礼
echo $results['results']['collection1'][0]['info']; で正しく表示できました! ありがとうございました!