| 
			| 
					
						| borbos 
								Интересующийся    Offline | 
								|  | «  : 25-02-2014 23:12 »  |  | 
 
 Приветствую. Есть на cpan модуль для парсинга json-а - JSON, до поры до времени все было нормально. Но, вот, немного изменился формат присылаемых данных - в json стал встречаться русский тест, теперь парсер спотыкается. Что делать??? {"pid":91294,"status":"SUCCESS","frameUrl":"","isMobile":false,"uaVersion":34,"uaFamilyName":"Chrome","osName":"Windows XP","countryId":21825,"region":"Киев","city":"Киев","keywords":"","district":"Центральная Украина","counterUrl":null,"matchUrl":null,"ads":[{"format":"popup","showLogo":false,"trackShowUri":"/_t=impr&itck=25nDoQ5CUWcp7IqT_XC01V2rbs7I-BrwaMZVk1gnoaNkT9mQa20i-OhuC_bgwIVgEionsyIQ6tHbPJfeuATmslLArvbR6CpUUo3r_r86jCgs5hwxvJwM2bmz3u2xNmEt_NgM0Sw4nKUmCFvbJHZhTl7MRCj6OlVmDivRDCvpY65n7Swn-PrpH3Wzp4lkoYpvd6jlm0Mov_1voulKdCMdzWUljeGB-eY3I02XlzI7z1mbHhkAK_oly_tZdb7nIvhy8mbEvWcSxy2_yoWeLPDxI7kh0Zzh_3hLBgnHGNc3Dyq_N9QQTHFbjuN-N9giG3HnVEu7D3phaM4UVv5cCdFFLxGs8BW6u5FBCmIinLCZ8tXOx00CQNyB7r0rJM9vjwJt-sA","clickUri":"/?t=clk&ctck=25m9bWYqUuf5sTaSy_4aygLoeNuxnMG7LgFi5MHjOIY0bsomIwAwwnuxYOGsUtRD7hwz8C_RAZajxqpUCB4eizrMfpuTYOmbS5rzwodpPpAY-A3sIndO1PmZGmuOD04DHTpbtrqDAUftb091O2VMXV2As05HW3HpZCisnwjCDLgBTSJWzmaUm1SetYi4BWE8on81ATJBOyLXHSp7-XJw80uZi1nI6pyod3f5OU-ZRfgspdsQ8wB6rJBGPrLIqrzMnk1dPT82nti1oBG7SgwN7_9NzvfHbb3H_uxa5dBPeh4M2fs3dArKnEgif0nFzTtfFq_cucuqQeN_v6XiETIqSg1XoJ11BYyHifhayniDzsqEAnVKTVe9_y49awBxduJejg","trackingDomain":"http://owners.central-processing.info","impDomain":"http://ruhc.about-home.info","blockId":null,"period":"1","limit":"10","width":"240","height":"400","src":"/2/5/b/25b8906fd4bf15bfe59bb4a8d5308715.gif","stubSrc":null,"headerUrl":null,"headerText":null,"closeUri":"/?t=ppund&ctck=25m9bWYqUuf5sTaSy_4aygLoeNuxnMG7LgFi5MHjOIY0bsomIwAwwnuxYOGsUtRD7hwz8C_RAZajxqpUCB4eizrMfpuTYOmbS5rzwodpPpAY-A3sIndO1PmZGmuOD04DHTpbtrqDAUftb091O2VMXV2As05HW3HpZCisnwjCDLgBTSJWzmaUm1SetYi4BWE8on81ATJBOyLXHSp7-XJw80uZi1nI6pyod3f5OU-ZRfgspdsQ8wB6rJBGPrLIqrzMnk1dPT82nti1oBG7SgwN7_9NzvfHbb3H_uxa5dBPeh4M2fs3dArKnEgif0nFzTtfFq_cucuqQeN_v6XiETIqSg1XoJ11BYyHifhayniDzsqEAnVKTVe9_y49awBxduJejg"}],"aframeUrl":""} |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| sss 
								Специалист    Offline | 
								|  | « Ответ #1 : 26-02-2014 04:05 »  |  | 
 
 Перед парсингом конвертировать текст в ANSI. Он скорее всего в UTF8 на входе... |  
						| 
								|  |  
								|  |  Записан | 
 
  while (8==8)  |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #2 : 26-02-2014 08:42 »  |  | 
 
 Это неправильный json формат
 По крайней мере utf-8 должно быть кодированым.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	|  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #4 : 26-02-2014 15:36 »  |  | 
 
 Да, родной вот браузер получает \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 А то что у тебя - увы - подобие - соблюден только формат данных |  
						| 
								|  |  
								| « Последнее редактирование: 26-02-2014 15:40 от Sla » |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #5 : 26-02-2014 20:50 »  |  | 
 
 borbos, снова та же проблема: внимательно читай документацию!http://search.cpan.org/~makamaka/JSON-2.90/lib/JSON.pm Объектный вариант позволяет очень многое. Я предпочитаю JSON::XS, как несравненно более быстрый. Кроме того, полезно знать о внутреннем представлении строк в Perl. Например тот факт, что они имеют кодировку. Также открытые файлы и т.п. имеют свою кодировку. Внимательно почитай мануал модуля Encode. |  
						| 
								|  |  
								| « Последнее редактирование: 26-02-2014 20:54 от RXL » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| borbos 
								Интересующийся    Offline | 
								|  | « Ответ #6 : 27-02-2014 00:47 »  |  | 
 
 Да разобрался вроде как уже, спасибо.    Кстати, как вытащить значение из массива json, что то не получается, возвращает хэш какой то. Хотя дата дампером вытаскивается нормально. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #7 : 27-02-2014 06:07 »  |  | 
 
 Кстати, как вытащить значение из массива json
 Какого? , что то не получается, возвращает хэш какой то
 Какой? . Хотя дата дампером вытаскивается нормально.
 Каким? Как? Извини, хрустальный шар куда-то закатился... |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| borbos 
								Интересующийся    Offline | 
								|  | « Ответ #8 : 27-02-2014 16:03 »  |  | 
 
 Сорри, туплю. Парсим массив в формате json  #/usr/lib/perl -w
 use JSON;
 use Data::Dumper;
 
 $dat = '[{"format":"popup","showLogo":false,"trackShowUri":"/_t=impr&itck=25nDoQ5CUWcp7IqT_XC01V2rbs7I-BrwaMZVk1gnoaNkT9mQa20i-OhuC_bgwIVgEionsyIQ6tHbPJfeuATmslLArvbR6CpUUo3r_r86jCgs5hwxvJwM2bmz3u2xNmEt_NgM0Sw4nKUmCFvbJHZhTl7MRCj6OlVmDivRDCvpY65n7Swn-PrpH3Wzp4lkoYpvd6jlm0Mov_1voulKdCMdzWUljeGB-eY3I02XlzI7z1mbHhkAK_oly_tZdb7nIvhy8mbEvWcSxy2_yoWeLPDxI7kh0Zzh_3hLBgnHGNc3Dyq_N9QQTHFbjuN-N9giG3HnVEu7D3phaM4UVv5cCdFFLxGs8BW6u5FBCmIinLCZ8tXOx00CQNyB7r0rJM9vjwJt-sA","clickUri":"/?t=clk&ctck=25m9bWYqUuf5sTaSy_4aygLoeNuxnMG7LgFi5MHjOIY0bsomIwAwwnuxYOGsUtRD7hwz8C_RAZajxqpUCB4eizrMfpuTYOmbS5rzwodpPpAY-A3sIndO1PmZGmuOD04DHTpbtrqDAUftb091O2VMXV2As05HW3HpZCisnwjCDLgBTSJWzmaUm1SetYi4BWE8on81ATJBOyLXHSp7-XJw80uZi1nI6pyod3f5OU-ZRfgspdsQ8wB6rJBGPrLIqrzMnk1dPT82nti1oBG7SgwN7_9NzvfHbb3H_uxa5dBPeh4M2fs3dArKnEgif0nFzTtfFq_cucuqQeN_v6XiETIqSg1XoJ11BYyHifhayniDzsqEAnVKTVe9_y49awBxduJejg","trackingDomain":"http://owners.central-processing.info","impDomain":"http://ruhc.about-home.info","blockId":null,"period":"1","limit":"10","width":"240","height":"400","src":"/2/5/b/25b8906fd4bf15bfe59bb4a8d5308715.gif","stubSrc":null,"headerUrl":null,"headerText":null,"closeUri":"/?t=ppund&ctck=25m9bWYqUuf5sTaSy_4aygLoeNuxnMG7LgFi5MHjOIY0bsomIwAwwnuxYOGsUtRD7hwz8C_RAZajxqpUCB4eizrMfpuTYOmbS5rzwodpPpAY-A3sIndO1PmZGmuOD04DHTpbtrqDAUftb091O2VMXV2As05HW3HpZCisnwjCDLgBTSJWzmaUm1SetYi4BWE8on81ATJBOyLXHSp7-XJw80uZi1nI6pyod3f5OU-ZRfgspdsQ8wB6rJBGPrLIqrzMnk1dPT82nti1oBG7SgwN7_9NzvfHbb3H_uxa5dBPeh4M2fs3dArKnEgif0nFzTtfFq_cucuqQeN_v6XiETIqSg1XoJ11BYyHifhayniDzsqEAnVKTVe9_y49awBxduJejg"}]';
 
 print decode_json($dat); # возвращает ARRAY(0x348ae4)
 Теперь выведем данные с помощью модуля Data::Dumper print Dumper(decode_json($dat)); Получим данные в виде $VAR1 = [           {             'width' => '240',             'blockId' => undef,             'clickUri' => '/?t=clk&ctck=25m9bWYqUuf5sTaSy_4aygLoeNuxnMG7LgFi5MHj OIY0bsomIwAwwnuxYOGsUtRD7hwz8C_RAZajxqpUCB4eizrMfpuTYOmbS5rzwodpPpAY-A3sIndO1PmZ GmuOD04DHTpbtrqDAUftb091O2VMXV2As05HW3HpZCisnwjCDLgBTSJWzmaUm1SetYi4BWE8on81ATJB OyLXHSp7-XJw80uZi1nI6pyod3f5OU-ZRfgspdsQ8wB6rJBGPrLIqrzMnk1dPT82nti1oBG7SgwN7_9N zvfHbb3H_uxa5dBPeh4M2fs3dArKnEgif0nFzTtfFq_cucuqQeN_v6XiETIqSg1XoJ11BYyHifhayniD zsqEAnVKTVe9_y49awBxduJejg',             'trackShowUri' => '/_t=impr&itck=25nDoQ5CUWcp7IqT_XC01V2rbs7I-BrwaMZ Vk1gnoaNkT9mQa20i-OhuC_bgwIVgEionsyIQ6tHbPJfeuATmslLArvbR6CpUUo3r_r86jCgs5hwxvJw M2bmz3u2xNmEt_NgM0Sw4nKUmCFvbJHZhTl7MRCj6OlVmDivRDCvpY65n7Swn-PrpH3Wzp4lkoYpvd6j lm0Mov_1voulKdCMdzWUljeGB-eY3I02XlzI7z1mbHhkAK_oly_tZdb7nIvhy8mbEvWcSxy2_yoWeLPD xI7kh0Zzh_3hLBgnHGNc3Dyq_N9QQTHFbjuN-N9giG3HnVEu7D3phaM4UVv5cCdFFLxGs8BW6u5FBCmI inLCZ8tXOx00CQNyB7r0rJM9vjwJt-sA',             'limit' => '10',             'period' => '1',             'src' => '/2/5/b/25b8906fd4bf15bfe59bb4a8d5308715.gif',             'headerText' => undef,             'headerUrl' => undef,             'height' => '400',             'stubSrc' => undef,             'format' => 'popup',             'impDomain' => 'http://ruhc.about-home.info ',             'trackingDomain' => 'http://owners.central-processing.info ',             'showLogo' => bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' ),             'closeUri' => '/?t=ppund&ctck=25m9bWYqUuf5sTaSy_4aygLoeNuxnMG7LgFi5M HjOIY0bsomIwAwwnuxYOGsUtRD7hwz8C_RAZajxqpUCB4eizrMfpuTYOmbS5rzwodpPpAY-A3sIndO1P mZGmuOD04DHTpbtrqDAUftb091O2VMXV2As05HW3HpZCisnwjCDLgBTSJWzmaUm1SetYi4BWE8on81AT JBOyLXHSp7-XJw80uZi1nI6pyod3f5OU-ZRfgspdsQ8wB6rJBGPrLIqrzMnk1dPT82nti1oBG7SgwN7_ 9NzvfHbb3H_uxa5dBPeh4M2fs3dArKnEgif0nFzTtfFq_cucuqQeN_v6XiETIqSg1XoJ11BYyHifhayn iDzsqEAnVKTVe9_y49awBxduJejg'           }         ];Собственно, в чем загвоздка, как получить доступ к определенному элементу распарсенного массива json. Такая вот конструкция  decode_json($dat)->{'format'}; не канает |  
						| 
								|  |  
								| « Последнее редактирование: 27-02-2014 16:06 от borbos » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #9 : 27-02-2014 16:21 »  |  | 
 
 decode_json($dat) - возвращает массив. Так? Как  достучаться до элемента массива?arr[0]
 arr->[0]
 arr=>[0]
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| borbos 
								Интересующийся    Offline | 
								|  | « Ответ #10 : 27-02-2014 21:08 »  |  | 
 
 decode_json($dat) - возвращает массив.Так?
 Хэш, если быть точным. Как  достучаться до элемента массива?arr[0]
 arr->[0]
 arr=>[0]
 
Не работает, пробовал. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #11 : 27-02-2014 21:51 »  |  | 
 
 Хэш, если быть точным. Та ты что? И что? Не работает, пробовал. Что пробовал? Я тебе показал три? варианта А посмотреть в документацию? |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| borbos 
								Интересующийся    Offline | 
								|  | « Ответ #12 : 28-02-2014 16:26 »  |  | 
 
 Та ты что? И что? А ничего.... Что пробовал? Все - гугл, англоязычные ветки форумом, напрягать свои извилины.  Я тебе показал три? варианта ОНи не работают - возвращается хеш массива, а не сами значения или не возвращается ничего... А посмотреть в документацию?
 Смотрел, там об этом сказано туманно и вскользь, непонятно вообще ничего... |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #13 : 28-02-2014 18:41 »  |  | 
 
 $VAR1 = [{
 'width' => '240',
 
my $data = decode_json($dat);print $data->[0]{width};
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #14 : 28-02-2014 18:53 »  |  | 
 
 RXL, ну зачем же обухом по голове? |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| borbos 
								Интересующийся    Offline | 
								|  | « Ответ #15 : 28-02-2014 19:38 »  |  | 
 
 Хм, действительно все просто. Спасибо большое, все работает. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #16 : 28-02-2014 21:20 »  |  | 
 
 Слав, тут учить нечему — он даже основы основ не знает. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #17 : 01-03-2014 06:16 »  |  | 
 
 RXL, ну дело не в знании основ, а в намерениях. Бывает намерение вникнуть и разобраться, бывает: "дайте мне правильный образец и ни...ёт". Как-то это на школьное образование завязано, на привычки и сформировавшееся представление о правильном - я ещё не до конца понял, как. Но факт. |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #18 : 01-03-2014 10:04 »  |  | 
 
 Я считаю, что нужно понимать, что делаешь, а не писать код копипастой на авось. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| borbos 
								Интересующийся    Offline | 
								|  | « Ответ #19 : 01-03-2014 10:48 »  |  | 
 
 Слав, тут учить нечему — он даже основы основ не знает.
 А вот лить по напраслину не надо, Ром. Основы основ. Я виноват что ли, что описание работы с массивами в данном модуле описано через ж... ? Ну вот, парсинг обычной json структуры разжеван полностью - тут и проблем нет никаких. А про массивы описано вскользь. И не у одного меня ( по вашему такого дурака) возникли данные проблемы, Гугл соврать не даст... Обосрать человека много ума не надо, все мы - разные. А попытаться понятно объяснить, вот за это, я считаю, стоит уважать... |  
						| 
								|  |  
								| « Последнее редактирование: 01-03-2014 10:50 от borbos » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #20 : 01-03-2014 11:30 »  |  | 
 
 Я виноват что ли, что описание работы с массивами в данном модуле описано через ж... ? Причём тут модуль? Работа с массивами - это основы языка Perl, они не зависят от модулей. Структура ясная: массив, внутри хэш. В чём проблема? В незнании синтаксиса, как с такой структурой работать. |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #21 :  01-03-2014 11:34 »   |  | 
 
 Эээ... А при чем тут документация модуля?   Это ж основы языка. Если в каждом из нескольких десятков тысяч модулей на CPAN приложить подробную документацию по языку, это будет невозможно читать.borbos , ты наверно неверно понимаешь, с чем имеешь дело. Модуль - не утилита, не самостоятельный продукт, а программный пакет, приложение к языку. В инструкции по замене предохранителей в автомобиле нет инструкции по вождению. |  
						| 
								|  |  
								| « Последнее редактирование: 01-03-2014 11:37 от RXL » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	|  |