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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Невалидный JSON, требуется регулярка или способ

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
vlados
Отправлено: 19 Декабря, 2012 - 22:54:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


Добрый вечер\день\полдень\утро!

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

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


Думаю смысл вы поняли. Надо заменить все " на ', которые находятся внутри "".

(Отредактировано автором: 19 Декабря, 2012 - 23:04:17)

 
 Top
sKaa
Отправлено: 19 Декабря, 2012 - 23:18:28
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]



(Добавление)
Какой смысл обращаться к регуляркам если нужно поменять всего один символ?
 
 Top
vlados
Отправлено: 19 Декабря, 2012 - 23:32:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


Вашим вариантом я заменю ВСЕ символы ", а мне надо заменить символ " в между "".

Т.е. чтобы из

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


Стало

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



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




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

нужен интеллектуальный способ, коим может служить человек, но скрипт обучить практически не реально простым способом


-----
Just do it
 
 Top
vlados
Отправлено: 19 Декабря, 2012 - 23:38:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


У меня 4 файла по 100 мб. Нужно их как то привести к нормальному виду. неважно как, главное не руками Улыбка

Буду несказанно рад, если вы предложите адекватную мысль.
 
 Top
Panoptik
Отправлено: 19 Декабря, 2012 - 23:44:46
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




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

можно попробовать тупо перебирать как строку посимвольно


-----
Just do it
 
 Top
vlados
Отправлено: 19 Декабря, 2012 - 23:57:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 391
Дата рег-ции: Май 2011  


Помог: 1 раз(а)

[+][+][+]


Этого я и опасался. Но ничего, я лучше заново все перепаршу Улыбка

Всем спасибо за ответы и за потраченное время.
 
 Top
armancho7777777 Супермодератор
Отправлено: 20 Декабря, 2012 - 10:26:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




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.  

(Отредактировано автором: 20 Декабря, 2012 - 11:24:42)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB