Я пытаюсь получить содержимое jSON похожий на страницу и распечатать все значения, как вы можете видеть в моем коде ниже.
ОБНОВЛЕННЫЙ КОД
<?php $json = file_get_contents('http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getTrims&year=2007&make=mini'); $vres = array('?({"Trims":' , '});'); $allakse = array("" , ""); $json = str_replace($vres, $allakse, $json); echo $json; $cars = json_decode($json, true); foreach ($cars[0] as $value) { echo $value, "<br>"; }
так выглядит файл.
?({ Trims: [ { "model_id":"15155" ,"model_make_id":"ford" ,"model_name":"Taurus" ,"model_trim":"" ,"model_year":"2000" ,...(all available model fields are included) }, { "model_id":"15073" ,"model_make_id":"ford" ,"model_name":"Taurus" ,"model_trim":"3.0" ,"model_year":"2000" ,...(all available model fields are included) }, {etc...} ]});
Даже если я заменил некоторые символы, чтобы он выглядел как синтаксис jSON в начале и в конце, я не могу заставить его работать. Что я делаю не так?
Ответ прерывается JSON-P, а не JSON.
JSON-P состоит из вызова функции (к имени функции, которое вы указываете в URL-адресе ( ?
В этом случае)) с данными, переданными через первый аргумент.
В JSON-P эти данные должны быть JSON. В этом случае это не так. Это литерал объекта JavaScript, который не соответствует подмножеству, соответствующему спецификации JSON. (В частности, у вас есть имена свойств, выраженные как идентификаторы вместо строковых литералов).
Вы можете использовать JSON-валидатор для определения ошибок в ответе JSON и попытаться их очистить (возможно, используя некоторый нечестивый набор регулярных выражений).
Кроме того, вы можете посмотреть, как запустить движок JavaScript (например, Node.js или Rhino), определяя функцию, которая передает первый аргумент JSON.stringify()
, затем печатает результат (а затем записывает его обратно в переменную PHP) ,
Обновить:
Я посмотрел URL, который вы указали. Вывод не соответствует данным в вопросе. JSON действительно действует и без проблем, которые показывает ваш код.
Просто прекратите запрашивать callback=?
чтобы получить JSON вместо JSON-P. Тогда вам не нужно снимать обертку JSON-P.