Здравствуйте! Подскажите пожалуйста, как мне спарсить значения json файла, который обернут в callback ?
Получаю значение так:
$json = file_get_contents('https://geoip-db.com/jsonp/00.000.00.00');
$data = json_decode($json);
Само получаемое значение:
callback({"country_code":"RU","country_name":"COUNTRY","city":"CITY","postal":null,"latitude":00.0000,"longitude":00.0000,"IPv4":"00.000.00.00","state":" REGION'"})
Нужны только country_name, city, state
Для одного уровня вложенности можно так.
$json = file_get_contents('https://geoip-db.com/jsonp/00.000.00.00');
preg_match_all("/\{.*\}/",$json,$data2);
$data = json_decode($data2[0][0]);
echo $data->IPv4;
Можно вырезать вызов с помощью регулярного выражения /^\w+\((.*)\)$/
Мы просто пропускаем идентификатор(имя функции) и скобки и захватываем всё, что осталось(искомый json).
Приведённый в вопросе JSON невалиден, 00.00000 - не является валидным числом
Fiddle
<?php
$json = 'callback({"country_code":"RU","country_name":"COUNTRY","city":"CITY","postal":null,"latitude":0.0000,"longitude":0.0000,"IPv4":"00.000.00.00","state":" REGION\'"})';
preg_match('/^\w+\((.*)\)$/', $json, $match);
if (!$match) die('Malformed JSONP');
$data = json_decode($match[1], true);
if (!$data) die ('Malformed JSON');
var_dump($data);
В случае, если исходный JSON может быть многострочным, нужно модифицировать регулярное выражение для захвата любых символов(включая переносы строки).
Например, так:
'/^\w+\(([\s\S]*)\)$/m'
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости