2012-07-31 5 views
4

나는 펄 개체를 JSON 문자열로 변환하는데 많은 시간을 보냈다. 그러나 아직도 나는 발견 할 수 없었다. 나는 JSYNC를 사용했다. 하지만 문제가 있다는 것을 알았습니다. 그럼 내가 펄에서 JSON 모듈을 사용합니다. 이것은 내 코드입니다.
펄 개체를 json 문자열로 변환하는 방법

my $accountData = AccountsData ->new(); 
$accountData->userAccountsDetail(@userAccData); 
$accountData->creditCardDetail(@userCrData); 
my $json = to_json($accountData,{allow_blessed=>1,convert_blessed=>1}); 
print $json."\n"; 

나는 코드가 거기에 내가했던 어떤 실수 null 됐나을 인쇄 실행하면?

+1

www.cpan.org의 모듈 JSON :: XS 또는 JSON을 확인하십시오. –

답변

8

첫 번째 버전 :

use JSON::XS; 
use Data::Structure::Util qw/unbless/; 


sub serialize { 
    my $obj = shift; 
    my $class = ref $obj; 
    unbless $obj; 
    my $rslt = encode_json($obj); 
    bless $obj, $class; 
    return $rslt; 
} 

sub deserialize { 
    my ($json, $class) = @_; 
    my $obj = decode_json($json); 
    return bless($obj, $class); 
} 

두 번째 버전 :

package SerializablePoint; 

use strict; 
use warnings; 
use base 'Point'; 

sub TO_JSON { 
    return { %{ shift() } }; 
} 

1; 

package main; 

use strict; 
use warnings; 
use SerializablePoint; 
use JSON::XS; 

my $point = SerializablePoint->new(10, 20); 

my $json = JSON::XS->new->convert_blessed->encode($point); 
print "$json\n"; 
print "point: x = ".$point->get_x().", y = ".$point->get_y()."\n"; 
+3

일반적으로 JSON :: XS보다는 직접 JSON을 사용하는 것이 좋습니다. 가능하면'JSON :: XS'를 사용하고 순수한 Perl 버전으로 폴백합니다. – Quentin

+1

고맙습니다. JSON :: XS를 사용하여 문제를 정리했습니다. – Amila

+1

"예쁜"결과물을 얻으려면 : (JSON :: XS 대신)'JSON qw (encode_json)'을 사용하고,'sub serialize {my $ json = JSON-> new-> utf8; ... my $ rslt = $ json-> pretty-> encode ($ obj); ...}'. – lepe

2

the docs에 따르면, 개체는 to_json 다음 사용하는 TO_JSON 방법을 제공해야합니다. 또한 자신의 TO_JSON 메소드를 제공하지 않으려는 경우 전환하기 전에 JSON -convert_blessed_universally;으로 전화를 걸 수 있음을 암시하는 것으로 보입니다.하지만 실험실 기능에서는 실험실 기능임을 알 수 있습니다.

관련 문제