Недавно я столкнулся с задачей.
Есть некий внешний API, который отдает JSON.
Но на тестовом сервере ведутся работы и в него попадают левые данные, нотисы, html и прочнее.
Ответ принимает следующий вид
Notice: unrecognized option - colour
{"code":200,"id":535829352}
Задача: вытащить корректный JSON.
Сначала подумайте сами, а вот моё решение.
/**
* Find JSON in string
*
* @param string $string Input string
* @return array
*/
function findJson($string)
{
$re = '~\{(?:[^{}]|(?R))*\}~';
if (preg_match($re, $string, $m)) {
$result = json_decode($m[0], true);
} else {
$result = ['error' => 'invalid_json'];
}
return $result;
}