Perl JSON :: XS非OO接口

问题描述 投票:0回答:1

我见过的Perl JSON :: XS模块的所有文档和示例都使用OO接口,例如

print JSON::XS->new->ascii()->pretty()->canonical()->encode($in);

但是我不一定每次都想要所有这些选项,我希望像使用基本JSON模块一样,将它们发送到哈希中,例如

print to_json($in, { canonical => 1, pretty => 1, ascii => 1 } );

发送到该encode_json的结果

Too many arguments for JSON::XS::encode_json

有什么办法吗?

json perl
1个回答
0
投票

JSON的to_json如果已安装,则使用JSON :: XS,因此,如果要使用to_jsonJSON::XS版本,只需使用JSON中的一个即可。

或者,您可以重新创建to_json

sub to_json
   my $encoder = JSON::XS->new();
   if (@_ > 1) {
      my $opts = $_[1];
      for my $method (keys %$opts) {
         $encoder->$_( $opts->{$_} ) for keys %$opts;
      }
   }

   return $encoder->encode($_[0]);
}
© www.soinside.com 2019 - 2024. All rights reserved.