Я пытаюсь использовать Openstreetmap и PHP, чтобы указать место на карте.
Как вы можете видеть ниже, я получаю массив JSON, но PHP возвращает Значение NULL.
Обратите внимание, что мой $url
является действительным JSON (вы можете проверить его Вот).
<?
$url = 'http://nominatim.openstreetmap.org/search/Piazza%20Duomo%20Trento?format=json&addressdetails=1&limit=1&polygon_svg=1';
$html = file_get_contents($url);
$jsonout = json_decode($html);
echo $jsonout[0];
?>
Что я делаю неправильно?
Что я делаю неправильно?
Прежде всего, ваш открывающий тег неверен:
<? ----> <?php
Тогда вы не можете echo
такой массив использование var_dump
в вашем массиве, чтобы увидеть структуру.
Когда я попробую ваш код с исправлениями, я получил это:
array (size=1)0 =>
object(stdClass)[1]
public 'place_id' => string '8577656' (length=7)
public 'licence' => string 'Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright' (length=84)
public 'osm_type' => string 'node' (length=4)
public 'osm_id' => string '924463183' (length=9)
public 'boundingbox' =>
array (size=4)
0 => string '46.0675164' (length=10)
1 => string '46.0676164' (length=10)
2 => string '11.1217498' (length=10)
3 => string '11.1218498' (length=10)
public 'lat' => string '46.0675664' (length=10)
public 'lon' => string '11.1217998' (length=10)
public 'display_name' => string 'Piazza Duomo, Piazza del Duomo, centro storico Trento, Trento, TN, TAA, 38122, Italia' (length=85)
public 'class' => string 'highway' (length=7)
public 'type' => string 'bus_stop' (length=8)
public 'importance' => float 0.311
public 'icon' => string 'http://nominatim.openstreetmap.org/images/mapicons/transport_bus_stop2.p.20.png' (length=79)
public 'address' =>
object(stdClass)[2]
public 'bus_stop' => string 'Piazza Duomo' (length=12)
public 'pedestrian' => string 'Piazza del Duomo' (length=16)
public 'suburb' => string 'centro storico Trento' (length=21)
public 'city' => string 'Trento' (length=6)
public 'county' => string 'TN' (length=2)
public 'state' => string 'TAA' (length=3)
public 'postcode' => string '38122' (length=5)
public 'country' => string 'Italia' (length=6)
public 'country_code' => string 'it' (length=2)
public 'svg' => string 'cx="11.1217998" cy="-46.067566399999997"' (length=40)
В ответ на ваш вопрос, за исключением попытки вывести массив со следующим утверждением
echo $jsonout[0];
Который бросит Catchable fatal error: Object of class stdClass could not be converted to string
Все отлично.
Если речь идет о доступе к членам json_decode
вернуться, см. ниже
$jsonout
массив с одним элементом,
что один элемент является объектом, вы можете получить доступ к его элементам, как это
print $jsonout[0]->licence;
Который будет выводить
Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright
Если вы хотите ассоциативный массив, вы можете передать второй аргумент для json_decode
, как это
$jsonout = json_decode($html,true);
print $jsonout[0]['display_name'];
Который будет декодировать JSON в ассоциативный массив и будет отображаться аналогичным образом
Piazza Duomo, Piazza del Duomo, centro storico Trento, Trento, TN, TAA, 38122, Italia
пожалуйста используйте print_r () вместо echo
$url = "http://nominatim.openstreetmap.org/search/Piazza%20Duomo%20Trento?format=json&addressdetails=1&limit=1&polygon_svg=1";
$html = file_get_contents($url);
$jsonout = json_decode($html);
print_r($jsonout[0]);
и вы получите свой результат.
или вы можете распечатать $jsonout[0]["license"]