2011-12-28 3 views
4

Я очень новый для PERL так, пожалуйста, помогите мне в следующемКак преобразовать строку в JSON в Perl

У меня есть один скрипт на языке Perl для выполнения команды Telnet. Этот скрипт получает ответ от сервера как строку. На самом деле сервер создает строку json, а затем отправляется в клиентскую программу, но клиентская программа показывает ее как string

Вопрос: Как я могу преобразовать эту строку в json и прочитать данные из этой строки json.

У меня есть JSon строку со структурой, аналогичной следующие

[{"success":"21","data":[{"name":"tester","lastname":"project"}]}] 

Ниже приведены последние строки, где я пытался преобразовать его в JSon

@lines = $telnet->waitfor('/$/'); 
my @json; 
@json = @{decode_json(@lines)}; 

Он печатает вывод, как показано ниже

HASH(0x1af068c) 

Спасибо заранее!

ответ

4

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

use strict; 
use warnings; 
use JSON::XS; 
use Try::Tiny; 
use Data::Dumper::Concise; 

my $data = qq<[{"success":"21","data":[{"name":"tester","lastname":"project"}]}]>; 

my $decoded; 

try { 
    $decoded = JSON::XS::decode_json($data); 
} 
catch { 
    warn "Caught JSON::XS decode error: $_"; 
}; 

print Dumper $decoded; 
+0

Спасибо большое. Не могли бы вы помочь мне в получении ценности «успеха»? Я пробовал, как показано ниже, но не работает. Я уверен, что я делаю что-то неправильно :(Я не знаю много (на самом деле ничего) о perl print $ decoded -> {'success'}; print $ decoded ['success']; Еще раз спасибо ! – Yogesh

+0

Функция декодирования умирает при ошибке. Я изменил пример использования модуля Try :: Tiny, чтобы поймать ошибку. –

+0

Еще раз спасибо :) Как я могу получить доступ к значениям «success», т.е. 21 из $ decoded? – Yogesh

1

Я думаю, что есть более простой:

use JSON(); 

$content = "{WHATEVER JSON CONTENT}"; 

$content = JSON->new->utf8->decode($content); 
Смежные вопросы