Здравствуйте! Подскажите пожалуйста, как мне спарсить значения 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'
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В результате перехода на Bitrix 165 и php версии 7 получил следующую багу:
Помогите сделать постраничную навигацию по выводу таблиц, к примеру по 20 строк на странице, вот код
Нужно получить все все переводы из файлов локализации по выбранному языку в виде многомерного массива