Ответ 1
Извлечение строки JSON из заданного текста
Поскольку вы ищете упрощенное решение, вы можете использовать следующее регулярное выражение, которое использует рекурсию для решения проблемы соответствия набора круглых скобок. Он соответствует всем значениям между {
и }
рекурсивно.
Хотя, вы должны отметить, что это не гарантирует работу со всеми возможными случаями. Он служит только быстрым методом извлечения JSON-строк.
$pattern = '
/
\{ # { character
(?: # non-capturing group
[^{}] # anything that is not a { or }
| # OR
(?R) # recurses the entire pattern
)* # previous group zero or more times
\} # } character
/x
';
preg_match_all($pattern, $text, $matches);
print_r($matches[0]);
Вывод:
Array
(
[0] => {"action":"product","options":{...}}
[1] => {"action":"review","options":{...}}
)
Проверка строк JSON
В PHP единственный способ узнать, является ли JSON-строка действительной, - это применить json_decode()
. Если парсер понимает JSON-строку и соответствует определенным стандартам, json_decode()
создаст представление объекта/массива строки JSON.
Если вы хотите отфильтровать те, которые не являются допустимыми JSON, вы можете использовать array_filter()
с функцией обратного вызова:
function isValidJSON($string) {
json_decode($string);
return (json_last_error() == JSON_ERROR_NONE);
}
$valid_jsons_arr = array_filter($matches[0], 'isValidJSON');