Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Hегулярное выражение, цикл, json (https://javascript.ru/forum/misc/55944-hegulyarnoe-vyrazhenie-cikl-json.html)

glot 22.05.2015 05:14

Hегулярное выражение, цикл, json
 
Есть json
{"pages":[{"objects":[{"id":"company_name","obj_type":"text","text":"Автосервис "Милор" "},{"id":"company_adres","obj_type":"text","text":"Ул. Генерала Тюленева 2С1"},{"id":"phone","obj_type":"text","text":"89653561815"}]}}

и мне нужно делать проверку на содержание не нужных кавычек, в по свойству text и если таковые есть удалять
"text":"Автосервис "Милор" "
должно остаться
"text":"Автосервис Милор "
предполагаю что нужно выдергивать значения между
/"text":"/ и /"}/
проверять на наличие кавычек, если есть удалять и вставлять обратно, но как все это провернуть не могу представить

glot 22.05.2015 07:08

пусть будет строка которую нужно преобразовать в json, цикл не знаю нужен будет или нет, перебирать как то надо, т.к. text в строке несколько раз встречается(кстати количество text может быть и 4, и 5, и 6)
И почему кавычки в json должны быть экранированы в обязательном порядке?

glot 22.05.2015 08:26

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

laimas 22.05.2015 09:18

Откуда эта строка берется?

ksa 22.05.2015 09:43

Цитата:

Сообщение от glot
И почему кавычки в json должны быть экранированы в обязательном порядке?

Иначе это не josn по его определению. :)

ksa 22.05.2015 09:45

Цитата:

Сообщение от glot
кавычки не в моей власти экранировать, есть то что есть

Тогда попробуем упростить задачу... В якобы joson-строке свойство text последнее в объекте?

kostyanet 22.05.2015 10:43

Цитата:

Сообщение от glot
И почему кавычки в json должны быть экранированы в обязательном порядке?

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

Решение: генерить json нормальной функцией, а не колхозить его на коленке конкатенацией. Тогда получите нормальный обхект и можете там заменить что угодно на что хотите.

Кстати, колхозят жисоны те, кто до сих пор гниет в кодировке 1251.

laimas 22.05.2015 10:50

Цитата:

Сообщение от kostyanet
Кстати, колхозят жисоны те, кто до сих пор гниет в кодировке 1251.

Костя, ты посты свои пишешь сидя на корточках?

kostyanet 22.05.2015 10:59

Сначала расскажите когда перейдете на юникод.

laimas 22.05.2015 11:03

Даже юникод?! А почему?

kostyanet 22.05.2015 17:34

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

Кстати, я как-то потратил полдня пытаясь наладить импорт-экспорт csv по юникоду. Х нанэ. Екзель utf-8 не понимает в принципе, ему надо нормальный юникод, а php когда делает csv в нормальном юникоде - глючит на кириллице. Пришлось забить и конвертить туда-сюда.

В смысле

fputcsv($handle,array_map(function($s) use($encoding){return mb_convert_encoding($s,$encoding);},$row),$delimiter);


fputcsv не ескепит кириллицу если в $encoding воткнуть ключ нормального юникода. Я уже забыл как он называется, пробовал и big и little endian - эквипенисуально. Екзель - мастдай.

laimas 22.05.2015 18:29

Цитата:

Сообщение от kostyanet
Потому что json_encode(), применительно к пхп, работает только с юникодом.

Не в иникоде должны быть данные, а в UTF-8.

Aetae 22.05.2015 23:03

var json = pseudojson.replace(/(:\s*")(.+?)("\s*[\]},])/g, function(a,b,c,d){
    return b + c.replace(/"/g,'\\"') + d
});
Только вам не поможет. Ваша "колхозная" функция ещё и скобочки забывает.

kostyanet, нормально utf8 он понимает, весь секрет в обязательном наличии BOM.)
<script>document.write(
'<a href="data:application/vnd.ms-excel;utf8,', encodeURIComponent('1; Фэйл\n2; =('), '" download="noBOM.csv">noBOM</a>', '<br>',
'<a href="data:application/vnd.ms-excel;utf8,', encodeURIComponent('\ufeff1; Вин\n2; =)'), '" download="BOM.csv">BOM</a>'
)</script>


Часовой пояс GMT +3, время: 20:22.