Cómo convertir un objeto perl en una cadena json

Intenté mucho tiempo convertir el objeto Perl en JSON String. Pero todavía no pude encontrar. Usé JSYNC. Pero vi que tiene algunos problemas. luego uso el módulo JSON en perl. Este es mi código.

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

Cuando ejecuto el código se imprime null.¿Hay algún error que haya cometido?

preguntado el 31 de julio de 12 a las 12:07

Consulte el módulo JSON::XS o JSON en www.cpan.org -

2 Respuestas

Primera versión:

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

Segunda versión:

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";

Respondido 31 Jul 12, 13:07

Generalmente es mejor usar JSON en lugar JSON::XS directamente. usará JSON::XS si está disponible y luego recurrir a una versión pura de Perl. - Quentin

Muchísimas gracias. Usé JSON::XS y resolví mi problema. - Amila

Para una salida "bonita": use JSON qw(encode_json) (en lugar de JSON::XS) y luego: sub serialize { my $json = JSON->new->utf8; ... my $rslt = $json->pretty->encode($obj); ... }. - hermosa

Según los docs, su objeto debe proporcionar un TO_JSON método, que to_json luego usará. También parece implicar que podrías llamar JSON -convert_blessed_universally; antes de la conversión si desea evitar proporcionar su propia TO_JSON método, aunque los documentos señalan que esa es una característica experimental.

Respondido 31 Jul 12, 13:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.