Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Невалидный JSON, требуется регулярка или способ
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Невалидный JSON, требуется регулярка или способ

Страниц (1): [1]
 

1. vlados - 19 Декабря, 2012 - 22:54:46 - перейти к сообщению
Добрый вечер\день\полдень\утро!

У меня есть невалидный JSON, невалидный он потому что в между "" встречаются перекрестные ".
Пример

CODE (javascript):
скопировать код в буфер обмена
  1. {"sth":"Что то где то и когда то сказануло мне "Привет мой гость родной, помоги vlados`ику с регуляркой!""}
  2. {"regexp":"Что за нах, что за нах, ненавижу я "регэкспы'! "}


Думаю смысл вы поняли. Надо заменить все " на ', которые находятся внутри "".
2. sKaa - 19 Декабря, 2012 - 23:18:28 - перейти к сообщению

(Добавление)
Какой смысл обращаться к регуляркам если нужно поменять всего один символ?
3. vlados - 19 Декабря, 2012 - 23:32:08 - перейти к сообщению
Вашим вариантом я заменю ВСЕ символы ", а мне надо заменить символ " в между "".

Т.е. чтобы из

CODE (SQL):
скопировать код в буфер обмена
  1. {"sth":"Что то где то и когда то сказануло мне "Привет мой гость родной, помоги vlados`ику с регуляркой!""}
  2. {"regexp":"Что за нах, что за нах, ненавижу я "регэкспы'! "}


Стало

CODE (SQL):
скопировать код в буфер обмена
  1. {"sth":"Что то где то и когда то сказануло мне 'Привет мой гость родной, помоги vlados`ику с регуляркой!'"}
  2. {"regexp":"Что за нах, что за нах, ненавижу я 'регэкспы'! "}
4. Panoptik - 19 Декабря, 2012 - 23:34:36 - перейти к сообщению
вам никакое правило не поможет для регулярки, если данные не валидны, вы просто не сможете найти логичный способ программно отделить кавычки значения данных

нужен интеллектуальный способ, коим может служить человек, но скрипт обучить практически не реально простым способом
5. vlados - 19 Декабря, 2012 - 23:38:07 - перейти к сообщению
У меня 4 файла по 100 мб. Нужно их как то привести к нормальному виду. неважно как, главное не руками Улыбка

Буду несказанно рад, если вы предложите адекватную мысль.
6. Panoptik - 19 Декабря, 2012 - 23:44:46 - перейти к сообщению
попытайтесь выделить для себя основные характеристики данных
к примеру ориентироваться на то что в ваших данных не будет знака ":" или "," - это зацепки, можно еще искать правильное окончание строки от ".....text"text in quotes" end of text->",
и обязательная запятая или квадратная/фигурная скобка после кавычек, всё что не соответствует таковым правилам - заменяйте на одинарные кавычки

можно попробовать тупо перебирать как строку посимвольно
7. vlados - 19 Декабря, 2012 - 23:57:56 - перейти к сообщению
Этого я и опасался. Но ничего, я лучше заново все перепаршу Улыбка

Всем спасибо за ответы и за потраченное время.
8. armancho7777777 - 20 Декабря, 2012 - 10:26:58 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.                   '~(?P<left>\{"\w+":")(?P<my_str>.*)(?P<right>"\})~',
  4.  
  5.                   function($matches)
  6.                   {
  7.                           return $matches['left'] .
  8.                                  // экранируем двойные ковычки
  9.                                  str_replace('"', '\\"', $matches['my_str']) .  
  10.                                  $matches['right'];
  11.                   },
  12.  
  13.                   trim($str)
  14.          );
  15.  
  16.  
  17. if(preg_match('~\}\s*\{~', $str_json))
  18. $str_json = '[' . preg_replace('~\}\s*\{~', '},{', $str_json) . ']';
  19.  
  20.  
  21. // Смотрим, что получилось
  22. print_r(json_decode($str_json, 1));
  23.  

 

Powered by ExBB FM 1.0 RC1