如何将perl对象转换为json字符串

时间:2012-07-31 11:59:35

标签: json string perl object

我花了很多时间将perl对象转换为JSON String。但我仍然找不到。我用的是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。我做错了吗?

2 个答案:

答案 0 :(得分: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";

答案 1 :(得分:2)

根据the docs,您的对象必须提供TO_JSON方法,to_json将使用该方法。它似乎暗示您可以在转换前致电JSON -convert_blessed_universally;,如果您想避免提供自己的TO_JSON方法,尽管文档会指出这是一个实验性功能。