への変換を提供するためのムースタイプを決定します。私は、MyClassのをインスタンス化し、json_encoderに新しいオブジェクトを渡すときはMyClassの、私はクラスを持っているJSON
package MyClass;
use Moose;
has 'IntegerMember' => (
is => 'rw',
isa => 'Int'
);
has 'BooleanMember' => (
is => 'rw',
isa => 'Bool'
);
sub TO_JSON {
my $self = shift;
return { % { $self } };
}
は現在、私は予想通りJSON文字列が返され得ます。
use JSON;
use MyClass;
my $object_to_encode = MyClass->new (
IntegerMember => 10,
BooleanMember => 1
);
my $json_encoder = JSON->new->convert_blessed;
my $json_data = $json_encoder->encode($object_to_encode);
MyClassので、私は私のto_jsonをサブルーチンを改善したい:私はPerlのブール値(1,0)(真、偽)に変換されるだろうが、それはJSONモジュールを設計する方法がないことを期待していました(1または0)から(trueまたはfalse)に任意のムース「ブール」メンバの変換を提供します。私は、MyClassのメンバーを反復ので、私が提供できるように私はムースタイプを決定することができますどのように
sub TO_JSON {
my $self = shift;
for my $member (%$self) {
if {
# Convert '1' to 'true' if Moose Type is 'Bool'
} else {
# Keep the member as is
}
}
}
変換の仕組みですか?
JSONモジュールは、\ 'スカラーリファレンスとして_真_と_false_を表し、 '1'と '\ 0'。しかし、 '1'か' 2'がブール値かどうかはわかりません。 – simbabque
'$ json_encoder-> encode'を呼び出す必要があります。それはオブジェクトです。 – simbabque
また、これはMooseの_isa_とは異なります。 Perl(またはMoose)には型がないので、_type_はそれほど気にしません。 _isa_に入れたものは、属性に入れた実行時チェックのためにのみ使用されます。 – simbabque