Мне нужно получить содержимое JSON с внешнего сайта, но по какой-то странной причине я не могу сделать его массивом или объектом, а вместо json_decode возвращает его как строку. Если я копирую одно и то же исходное содержимое в полную длину в переменную и использую это вместо этого, он работает правильно: json_decode превращает его в объект/массив.json_decode возвращает строку вместо массива/объекта, если исходное содержимое принадлежит внешнему серверу
function isJson($string) {
json_decode($string);
return (json_last_error() == JSON_ERROR_NONE);
}
$url = "http://www.igetthestufffromhere.com";
$response = trim(strip_tags(file_get_contents($url)));
Я попытался без отделки и strip_tags, а также попытался с CURL и результат тот же.
//$response ="[{\"SaleDate\":\"2015-10-22T14:09:00\",\"End\":\"2015-11-22T00:00:00\",...SHORTENED A LOT..\"ChildList\":null}],\"ExName\":\"SELVÄ\",\"SomeName\":\"\"}]";
echo "ENCODING:".mb_detect_encoding($response); returns: utf-8 every time
if(isJson($response)){
echo "Yes it is JSON"; // This is TRUE in both cases (local variable and fetched).
}
$json = json_decode($response, true);
var_dump($json);
var_dump возвращается: строка (302087) «» [{\ «SaleDate \» ....] «», когда я получаю ответ от этого другого домена, но когда я использую локальную переменную с точно таким же (139) {["SaleDate ...
Редактировать: Я не понимаю, почему я только что получил нисходящее зрение, я попробовал Чтобы решить это в течение примерно 5 часов, я вставил весь код, необходимый для ответа, и здесь есть настоящая проблема .. так что с моим вопросом !? У меня не должно быть этой проблемы? Мой первый вопрос на этом сайте тоже .
Похоже, что '$ response' - это строка с двойным кодированием JSON. Если вы действительно имеете обратную косую черту в своем JSON, это плохой знак. – deceze
Хорошо, спасибо, что поделились своим, хотя. Итак, почему он дважды закодирован в файле file_get_contents-version, а не в вставленном экземпляре и как это исправить? Я не могу изменить исходный текст. –
Если вы вставляете строку '' [{\ "SaleDate \" ...}] "в PHP как' $ json = "[{\" SaleDate \ "...}]", значение изменяется, потому что это интерпретируется как литерал строки PHP. Чтобы точно сохранить значение, оно должно быть '$ json = '" [{\\ "SaleDate \\" ...}] "''. Вы приняли это во внимание ...? – deceze