0

私が使用している JSON データ構造にはブール値があります。を呼び出して Perl データ構造に変換し、が提供する関数decode_jsonにフィードすると、は値の処理方法がわからないため、エラーがスローされます。XMLoutXML::SimpleXMLoutJSON::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' )
      };
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::Simpleで使用するためのXML対応の構造を作成したいということです。最初に述べたように、彼は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 に答える