![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| mastercz |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
В предыдущей теме были раскрыты все возникшие на тот момент вопросы и найдено решение, однако несколько позже на этапе эксплуатации возникло некоторая неудовлетворенность полученным результатам. Позволю себе задать еще пару вопросов по этой теме.
1. Json::XS парсирует JSON обратно в перл в кодировке UTF-8, хотя как я понимаю на JSON не накладывается ограничение на кодировку. Существует ли модуль JSON работающий с восмибитными кодировками. JSON::Syck вроди-бы как позволяет работать с восмибитными кодировками, но насколько качественный. 2. Для передачи нескольких переменных в одной конечно использовать простую обертку с экранированием управляющих символов в названиях и потом разворачивать по уникальным двойным символам (например' ==', если в названиях и данных символ '=' заменяться например на '/='). Однако хотелось бы применять JSON , как более стандартный контейнер, с которым можно работать стандартными функциями JavaScript фреймворков. Возможно ли как-нибудь реализовать собственную функцию для распарсивания хотя бы JSON объекта, представляющего собой простой хэш массив. Мне это представляется весьма сложной задачей, однако возможно я ошибаюсь ? 3. И третий последний вопрос. JSON::XS позволяет формировать JSON и в восьмибитной кодировке, однако при декодировании данные строки должны быть UTF8 для правильного декодирование. Т.К. JSON формат это переменная типа SCALAR, то если, я буду преобразовывать из koi8-r в UTF8 уже готовую строку, а не переменные на входе преобразования в JSON, это недолжно вызвать каких либо ошибок ? Заранее благодарен за помощь. К сожалению использовать UTF8 не оптимальное решение, так как скрипт реализован на koi8-r и при использовании UTF8 придется много изменять. Хранение же переменных utf8 на странице koi8-r не думаю что правильно и лишено всяких глюков. |
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
1+3 решается использованием JSON::XS + iconv:
iconv('utf-8', 'koi8-r', encode_json $object) Декодирование - в обратном порядке. По подводным камням восприятия JSON в javasctipt - смотрите http://search.cpan.org/~mlehmann/JSON-XS-2..._and_ECMAscript |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
Накладывает - только UTF8. JSON::XS предполагает, что данные в json - в кодировке utf8 - и тупо втягивает их в perl. Потом ставит на них флаг UTF8 в перле. Если у вас есть "как бы JSON", в котором данные в CP1251, то вы можете распарсить их JSON::XS, а потом просто снять флаг UTF8 с помощью utf8::downgrade в perl. Я так и делал.
Возможно. Но зачем? есть же JSON::XS. Но на выходе вы получите не объект, а простой хэш, Хотя, если мне не изменяет память - в JSON::XS есть какой-то хук, для того что при парсинге делать bless. Однако, заметьте JSON - предназначен для передачи данных, а не объектов - вот и используйте его по назначению. 3. попробуйте сделать обратную процедуру, сначала uft::upgrade на строку в кодировке (например koi8-r), а потом ее кодировать.. однако не факт что это сработает. |
|||
|
||||
| mastercz |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Решил все таки попробовать самостоятельно разбирать строчку при условии что это ОДНОМЕРНЫЙ ХЭШ,
однако столкнулся с некоторыми трудностями, так как обладаю весма скромными познаниями в регехп. Подскажите пожалуйста, что тут не так:
В результате получаю:
Пока, отправлял сам увидел почему... Уточню вопрос ... какое регулярное выражение нужно поставить вместо (?<!\\) чтобы перед закрывающейся кавычкой пропускать двойной слэш и не пропускать одинарный.. Это сообщение отредактировал(а) mastercz - 12.11.2009, 09:16 |
||||
|
|||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
Добавлено через 1 минуту и 28 секунд первый слеш - это эскейп в самой регулярке. P.S. а вообще - очень зря вы это затеяли.. поищите готовые парсеры. JSON::XS - это супер круто. рекомендую использовать его. Но если вам по зарез нужно cp1251 - используйте JSON::PC - там есть опция отключения utf8 |
|||
|
||||
| mastercz |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
по поводу слешей не точно выразился нужно чтобы работало условие или 2 слеша или не одного (ибо 1 это экран).
sir_nuf_nuf, к сожалению JSON::PC вестимо приказал долго жить, так как оного не наблюдается на span. Сейчас проверю как работает модул Mojo::JSON Проверил - тоже ставит флаг UTF8 Что же касается JSON::XS, охотно верю, так как другие JSON модули умирают ссылаясь в рекомендациях на оный. Однако,повторюсь, хранить в koi8-r странице utf8 думаю не верно, ИМХО будут наблюдаться глюки. Хранить же JSON в koi8-r, чтобы потом его конвертировать в UTF8 парсить и прогонять хэш через обратную конвертацию в koi8-r конечно можно, но как-то не очень вдохновляет. Делать Downgrade, тоже как-то, не очень вдохновляет (будет ли это поддерживаться в таком виде и дальше). А к JSON::XS думаю вернуться, как-только религия позволит перейти на уникод. Это сообщение отредактировал(а) mastercz - 13.11.2009, 01:49 |
|||
|
||||
| mastercz |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Написал простенький парсер для строк вида {'КЛЮЧ1':'ЗНАЧЕНИЕ1','КЛЮЧ2':'ЗНАЧЕНИЕ2'}.
В первом приближении вроде бы как даже работает. Т. к. в я в этом не очень разбираюсь, может кто посмотрит и прокомментирует (укажет, подскажет) явные ошибки. Заранее благодарен за помощь. А вот собственно и код:
|
|||
|
||||
| Vaneska |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 15.3.2005 Где: Москва Репутация: 3 Всего: 4 |
JSON::XS->new->latin1->encode($hash);
JSON::XS->new->latin1->decode($text); И ничего придумывать не нужно --------------------
http://isokolov.blogspot.com/ |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |