Regex для замены всех двойных кавычек в строке & quot; на \ & quot; к действительной строке json

У меня недопустимая строка json, такая как {«subject»: «tv 60» new «,» body «:» свяжитесь со мной для получения подробной информации «}.

И я пытаюсь использовать php preg_replace, чтобы проверить эту строку JSON, но не удается.

Пожалуйста, помогите мне создать регулярное выражение для замены «к /».

Заранее спасибо.

1

Решение

Предполагая, что символы ‘{‘, ‘:’ и ‘,’ в вашем JSON не имеют пробела между ними и двойными кавычками, решение может быть следующим:

$sanitizedJsonString = preg_replace('/([^:,{])"([^:,}])/', "$1".'\"'."$2", $yourMalformedJsonString);

Он находит все кавычки, которым не предшествуют символы «{», «:» или «,» и за которыми не следуют символы «:», «или»}, и заменяет их символом «\».

Надеемся, что это решит ваши проблемы, однако имейте в виду, что есть некоторые особые случаи, когда этот подход не работает: например, если внутри вашего искаженного JSON у вас есть слово внутри кавычек, за которым следует запятая вроде этой:

{"subject":"tv 60" new","body":"contact "me", for detail"}

у вас все еще будет неправильный JSON:

{"subject":"tv 60\" new","body":"contact \"me", for detail"}

Если вам нужно более надежное решение, я согласен со Стивом П., вам нужно реализовать скрипт, который анализирует вашу строку и при необходимости заменяет кавычки.

2

Другие решения

$string =~ /(?!<[\{:,])\"(?!\s*[:,\}]/\\"/g

Это регулярное выражение ищет любое «, которое НЕ следует за: a, или a {и НЕ сопровождается a: a или a}, и заключает его в кавычки с символом \. Это должно работать для вас.

1

Если вы не используете регулярные выражения для проверки ключей / значений перед вставкой в ​​объект JSON, использование регулярных выражений не является хорошим способом проверки указанного объекта JSON.

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

0
По вопросам рекламы [email protected]