Regex для замены всех двойных кавычек в строке «to \» на допустимую строку json

1

У меня есть некорректная строка json как {"subject": "tv 60" new "," body ":" contact me for detail "}.

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

Помогите мне создать регулярное выражение, чтобы заменить "to/".

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

  • 0
    Я не вижу to / в вашем JSON ...
  • 0
    Этот сайт является хорошим ресурсом для Regex в целом: regexr.com
Показать ещё 6 комментариев
Теги:
preg-replace
double-quotes

3 ответа

2

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

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

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


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

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

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

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

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

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

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

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню