preg_match_all

в PHP есть функция json_decode так вот она не обрабатывает невалидный json, лишние кавычки в ключах которого или в значениях или без кавычек вообще, обратный слэш, квадратные скобки и другие символы. В случае ошибки — возвращает пустой массив.

Примеры невалидных данных в json:

x41\\x36\\x25\\x45\\x45\\x25\\x45\\x45

"\""2288":9329\\"

rcc.co\",

"window['\\x61\\x74\\x6f\\x62']"

Необходимо сначала заменить эти символы и починить json.

В этом помогут регулярные выражения, а именно функция preg_match_all для поиска нужной порции данных в json полученном.

preg_match_all('/("d":")(.*?)(","l":)/s', $someJSON, $matches);

(.*?) между частями данных означает, что между ними может располагаться любой контент, который нужно проверить на специальные символы.

После запуска этой функции выбранные части данных из json будут располагаться в многомерном массиве $matches. Искомые данные будут в $matches[2] находиться.

Далее нужно пройтись по всем найденным фрагментам данных в массиве и сделать замену определенных символов, например на пустоту.

for ($i = 0; $i < count($matches[2]); $i++) {

$part = $matches[2][$i];
$part = str_replace('"', '', $part); // или несколько символов $part = str_replace(array(':', '"', '['), '', $part);

$someJSON = str_replace($matches[2][$i], $part, $someJSON);

}

Теперь json обработан и возможно, стал валидным :).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *