Perl JSON :: XS не OO интерфейс - PullRequest
       0

Perl JSON :: XS не OO интерфейс

1 голос
/ 17 февраля 2020

Вся документация и примеры, которые я видел для модуля Perl JSON :: XS, используют интерфейс OO, например

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

Но я не обязательно хочу, чтобы все эти опции были доступны каждый время я предпочел бы отправить их в га sh, как вы можете с модулем basi c JSON, например,

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

отправка на этот кодированный_ json приводит к

Too many arguments for JSON::XS::encode_json

Есть ли способ сделать это?

1 Ответ

3 голосов
/ 17 февраля 2020

JSON to_json использует JSON :: XS, если он установлен, поэтому, если вы хотите версию to_json, которая использует JSON::XS, просто используйте версию из JSON.

Или вы можете воссоздать to_json.

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

   return $encoder->encode($_[0]);
}

Но это не помогает прекратить каждый раз передавать параметры. Если вы кодируете несколько структур данных, лучше всего создать один объект и использовать его повторно.

my $encoder = JSON::XS->new->ascii->pretty->canonical;

print $encoder->encode($in);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...