0

我正在使用的 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

Aprint Dumper $result给出:

$result = {
        'a' => 'x',
        'b' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' )
      };
4

2 回答 2

5

在 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" />
于 2009-06-22T19:02:45.713 回答
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
}
于 2009-06-22T16:14:56.010 回答