Perl JSON将所有数字视为字符串
为了创建一个与严格类型语言一致的API,我需要修改所有JSON,以返回带引号的字符串代替整数,而无需逐个检查并修改底层数据 现在JSON就是这样生成的:Perl JSON将所有数字视为字符串,json,perl,Json,Perl,为了创建一个与严格类型语言一致的API,我需要修改所有JSON,以返回带引号的字符串代替整数,而无需逐个检查并修改底层数据 现在JSON就是这样生成的: my $json = JSON->new->allow_nonref->allow_unknown->allow_blessed->utf8; $output = $json->encode($hash); “并引用$hash中的每一个标量”是什么好方法呢?JSON的两个后端(JSON::PP和JS
my $json = JSON->new->allow_nonref->allow_unknown->allow_blessed->utf8;
$output = $json->encode($hash);
“并引用$hash中的每一个标量”是什么好方法呢?JSON的两个后端(JSON::PP和JSON::XS)都将输出类型基于值的内部存储。解决方案是将数据结构中的非引用标量字符串化
sub recursive_inplace_stringification {
my $reftype = ref($_[0]);
if (!length($reftype)) {
$_[0] = "$_[0]" if defined($_[0]);
}
elsif ($reftype eq 'ARRAY') {
recursive_inplace_stringification($_) for @{ $_[0] };
}
elsif ($reftype eq 'HASH') {
recursive_inplace_stringification($_) for values %{ $_[0] };
}
else {
die("Unsupported reference to $reftype\n");
}
}
# Convert numbers to strings.
recursive_inplace_stringification($hash);
# Convert to JSON.
my $json = JSON->new->allow_nonref->utf8->encode($hash);
如果您确实需要allow\u unknown
和allow\u founded
提供的功能,您需要在递归\u inplace\u stringization
中重新实现它(如果许可允许,可能通过从JSON::PP复制它),或者,您可以在调用递归\u就地\u字符串化之前使用以下命令:
# Convert objects to strings.
$hash = JSON->new->allow_nonref->decode(
JSON->new->allow_nonref->allow_unknown->allow_blessed->encode(
$hash));
$\[0]=“$\[0]”
对非引用标量的值不做任何更改,这取决于引用标量是什么<代码>perl-E'sub{$\u0]。=“idesh”}->($x=3);假设$x'
@Borodin,Perl通过引用传递参数,这样就可以用字符串化替换参数。由于该值现在存储为字符串,JSON将以字符串形式输出<代码>perl-MJSON-E'$x=4;说encode_json([$x]);sub{$\[0]=“$\[0]”}->($x);说encode_json([$x]);'代码>