Разбор любопытных данных JSON с PHP - PullRequest
0 голосов
/ 30 сентября 2018

Я попробовал все сейчас и не могу получить значение этого json:

[
{
place_id: "39915085",
licence: "Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright",
osm_type: "node",
osm_id: "2986714415",
boundingbox: [
"48.6900961",
"48.6901961",
"9.1934061",
"9.1935061"
],
lat: "48.6901461",
lon: "9.1934561",
display_name: "Flughafen Stuttgart, 43, Flughafenstraße, Leinfelden-Echterdingen, Landkreis Esslingen, Regierungsbezirk Stuttgart, Baden-Württemberg, 70629, Deutschland",
class: "place",
type: "house",
importance: 0.101
}
]

Я просто хочу значение "lat", но не могу получить его, например:

$url = 'https://nominatim.openstreetmap.org/search?q=Stuttgart+Airport&format=json';

$contents = file_get_contents($url);
$clima=json_decode($contents);
echo "test: ".$clima->lat;

Я не понимаю: (

Ответы [ 3 ]

0 голосов
/ 30 сентября 2018

Технически говоря, тот, который вы опубликовали, не является JSON.

В JSON ключ заключен в двойные кавычки.

{
     "jsonKey":"jsonValue",
}

В любом случае, как только вы получите правильный JSON,так как вы получаете массив, как это:

[
    {
        ....
        "lat":"48.6901461",
        ....
    }
]

Вы должны сделать это:

$contents = file_get_contents($url);
$clima = json_decode($contents);
$latitude = $clima[0]->lat;
0 голосов
/ 30 сентября 2018

Это работает для меня: https://help.openstreetmap.org/questions/59788/calling-nominatim-with-file_get_contents

PHP file_get_contents () не отправляет ни HTTP UserAgent, ни Referer, что нарушает политику использования для сервера.Вы можете легко добавить пользовательские заголовки HTTP, создав соответствующий контекст потока, например:

// Создать поток $ opts = array ('http' => array ('header' => "User-Agent: StevesCleverAddressScript3.7.6 \ г \ п "));$ context = stream_context_create ($ opts);

// Открыть файл с помощью заголовков HTTP, установленных выше $ file = file_get_contents ('http://nominatim.openstreetmap.org/search/q=Rome', false, $ context);Для получения дополнительной информации см. Руководство пользователя PHP.

0 голосов
/ 30 сентября 2018

Вы можете использовать запрос cURL для достижения этого:

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'https://nominatim.openstreetmap.org/search?q=Stuttgart+Airport&format=json'
));

echo json_decode(curl_exec($curl))->lat;

Судя по всему, file_get_contents($url) удаляет " из параметров.Ответ JSON в вашем посте для этого недействителен, json_decode() возвращает ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...