Как преобразовать частично неверный JSON в действительный? - PullRequest
2 голосов
/ 03 июня 2019

Я использую php для очистки веб-страницы и получения этой строки:

'[{endTime:"2019-06-05T17:15:00.000+10:00",startTime:"2019-06-05T17:00:00.000+10:00"}]'

, которая не является допустимой json, имена ключей инкапсулированы ...

Я использую preg_replace для созданиядействительный json:

$x = '[{endTime:"2019-06-05T17:15:00.000+10:00",startTime:"2019-06-05T17:00:00.000+10:00"}]'
$j = preg_replace('/(\w+)\s{0,1}:/', '"\1":', $x);

и получить это значение:

'[{"endTime":"2019-06-"05T17":"15":00.000+"10":00","startTime":"2019-06-"05T17":"00":00.000+"10":00"}]'

но я хочу это значение:

'[{"endTime":"2019-06-05T17:15:00.000+10:00","startTime":"2019-06-05T17:00:00.000+10:00"}]'

Как мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 03 июня 2019

RegEx 1

Ваше оригинальное выражение, кажется, найдено, мы просто немного изменим его на:

([{,])(\w+)(\s+)?:

, и оно может работать, мы добавляем левую границу:

([{,])

и правая граница:

:

, и наш ключевой атрибут находится в этой группе захвата:

(\w+)

RegEx 2

Мы можем расширить наше первое выражение до:

([{,])(\s+)?(\w+)(\s+)?:

в случае, если перед атрибутом ключа у нас могут быть пробелы:

Демо

Тест 1

$re = '/([{,])(\w+)(\s+)?:/m';
$x = '[{endTime:"2019-06-05T17:15:00.000+10:00",startTime:"2019-06-05T17:00:00.000+10:00"}]';
$subst = '$1"$2":';

$result = preg_replace($re, $subst, $x);

echo $result;

Тест 2

$re = '/([{,])(\s+)?(\w+)(\s+)?:/m';
$x = '[{endTime:"2019-06-05T17:15:00.000+10:00",startTime:"2019-06-05T17:00:00.000+10:00"}]';
$subst = '$1"$3":';

$result = preg_replace($re, $subst, $x);

echo $result;

Выход

[{"endTime":"2019-06-05T17:15:00.000+10:00","startTime":"2019-06-05T17:00:00.000+10:00"}]

Демо

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

0 голосов
/ 03 июня 2019

используйте этот шаблон:

([{,])([^:]+):

он найдет все тексты, следующие за { или ,

и используйте его для замены:

$1"$2":

Это добавит двойные кавычки с обеих сторон вашего слова.

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