6

perl オブジェクトを JSON 文字列に変換するのに多くの時間を費やしました。しかし、まだ私は見つけることができませんでした。私はJSYNCを使用しました。しかし、いくつかの問題があることがわかりました。次に、perl で 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されます。私が行った間違いはありますか?

4

2 に答える 2

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);
}

2番目のバージョン:

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";
于 2012-07-31T12:15:32.873 に答える
2

docsによると、オブジェクトはTO_JSONメソッドを提供する必要があり、それto_jsonが使用されます。またJSON -convert_blessed_universally;、独自のメソッドを提供することを避けたい場合は、変換前に呼び出すことができることを暗示しているようですTO_JSONが、ドキュメントではそれが実験的な機能であることに注意してください。

于 2012-07-31T12:21:12.257 に答える