Как я могу преобразовать логические значения JSON для вывода с использованием XMLout?
В используемой мной структуре данных 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);
В коде abive я получаю следующую ошибку - Не могу закодировать значение типа: JSON::XS::Boolean
print Dumper $result
дает:
$result = {
'a' => 'x',
'b' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' )
};
2 ответа
Я задал тот же вопрос на 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" />
Редактировать: я написал этот ответ перед всеми правками на исходный вопрос. Вопрос, который был сформулирован сейчас, заключается в том, что оригинальный автор хочет создать 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
}