如何使用XMLout为输出转换JSON布尔值?

时间:2009-06-22 14:48:13

标签: perl json xml-simple

我正在使用的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' )
      };

2 个答案:

答案 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
}