【发布时间】:2020-06-08 19:18:37
【问题描述】:
我正在尝试使用 perl 脚本将 JSON 数据转换为 XML。但是转换后的 JSON 没有预期的标签。以下是我使用的输入、代码和收到的输出
{"status": "Success",
"output":
{"product_artifacts":
[
{"variant_name": "test_var",
"artifacts":
[
{"artifact_created": "10-25-19 15:52:02",
"artifact_download_link": "http://abc:rt/ ",
"artifact_digital_size": 123,
"artifact_number": "123/234",
"artifact_revision": "AB1"}
]
}
]
},
"message":
[]
}
当传递给下面的 Perl 脚本时,上面的 Json 没有按预期创建 XML: Perl 脚本:
#!/app/perl/5.16.2/LMWP3/bin/perl
use strict;
use warnings;
binmode STDOUT, ":utf8";
use utf8;
use JSON;
use XML::Simple;
# Read input file in json format
my $json = '
{"status": "Success",
"output":
{"product_artifacts":
[
{"variant_name": "test_var",
"artifacts":
[
{"artifact_created": "10-25-19 15:52:02",
"artifact_download_link": "http://abc:rt/ ",
"artifact_digital_size": 123,
"artifact_number": "123/234",
"artifact_revision": "AB1"}
]
}
]
},
"message":
[]
}';
# Convert JSON format to perl structures
my $data = decode_json($json);
# Output as XML
print "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
print XMLout($data);
print "\n";
实际输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<opt status="Success">
<output>
<product_artifacts variant_name="test_var">
<artifacts artifact_created="10-25-19 15:52:02" artifact_digital_size="9293792" artifact_download_link="http://abc:rt " artifact_number="123/234" artifact_revision="AC" />
</product_artifacts>
</output>
</opt>
预期输出:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<status>Success</status>
<output>
<product_artifacts>
<variant_name>test_var</variant_name>
<artifacts>
<artifact_created>10-25-19 15:52:02</artifact_created>
<artifact_download_link>http://asd:rt </artifact_download_link>
<artifact_digital_size>123</artifact_digital_size>
<artifact_number>1234</artifact_number>
<artifact_revision>AC</artifact_revision>
</artifacts>
</product_artifacts>
</output>
<message/>
</root>
有人可以帮忙解决我哪里出错了
【问题讨论】:
-
XML::Simple 很糟糕。它并不一致,它的文档不鼓励使用它。
标签: json xml perl nested-attributes data-conversion