我正在使用的JSON数据结构中有布尔值。在致电decode_json
将其转换为Perl数据结构并提供给XMLout
提供的XML::Simple
函数时,会引发错误,因为XMLout
不知道如何处理JSON::XS::Boolean
值。
有没有办法将数据结构中的JSON::XS::Boolean
值转换为XML?
my $text = '{"a":"x","b":true}';
my $result = decode_json($text);
my $rec = XMLout( $result, RootName => 'root', SuppressEmpty => 1);
在代码中,我收到以下错误 - 无法编码类型的值:JSON :: XS :: Boolean
print Dumper $result
给出:
$result = {
'a' => 'x',
'b' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' )
};
答案 0 :(得分:5)
我问same question on PerlMonks并正在复制下面提出的解决方案。
基本上,解决方案是在将JSON :: XS :: Boolean传递给XMLout之前将其更改为适当的值:
use strict;
use warnings;
use JSON;
use XML::Simple;
my $text = '{"a":"x","b":true}';
my $result = decode_json($text);
for my $value ( values %$result ) {
next unless 'JSON::XS::Boolean' eq ref $value;
$value = ( $value ? 'true' : 'false' );
}
print XMLout( $result, RootName => 'root', SuppressEmpty => 1);
输出:
C:\Temp> test.pl
<root a="x" b="true" />
答案 1 :(得分:0)
编辑: 我在对原始问题的所有修改之前写了这个答案。现在提出的问题是,原始海报想要创建一个XML就绪结构,以便与XML :: Simple一起使用;最初说,似乎他只是想把JSON结构放在文本节点中。
Perl对象在通过线路发送之前需要进行JSON编码。
从你的例子:
my $text = '{"a":"x","b":true}';
my $result = decode_json($text);
print JSON->new->utf8->pretty(1)->encode($result);
您将获得以下内容:
$ perl json.pl
{
"a" : "x",
"b" : true
}