我有一个从XML文件生成JSON的perl代码。一切正常,我正在顺利完成转换。
因此,当前代码通常从XML生成JSON,JSON的所有标记及其结构与XML文件中的相同。
但我希望JSON标记总是有一些特定的格式,而不管输入xml。
例如,这里是perl代码的代码片段,输入XML,一般生成的JSON和预期的JSON。
XML文件:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Person SchemaVersion="1.0.8">
<personalData>
<workList>
<file>
"fileName": "/usr/temp/RPM_020515_.tar.gz",
</file>
</workList>
</personalData>
</Person>
Perl代码:
#!/usr/bin/perl
use strict;
use warnings FATAL => qw( all );
use Data::Dumper;
use JSON;
# Create the object of XML Simple
my $xmlSimple = new XML::Simple(KeepRoot => 1);
# Load the xml file in object
my $dataXML = eval { $xmlSimple->XMLin(Input_XML_File_Path)};
# use encode json function to convert xml object in json.
my $jsonString = encode_json($dataXML);
print $jsonString;
当前输出JSON:
{
"Person":{
"personalData": {
"workList": {
"file":{
"fileName": "/usr/temp/ABC.txt"
}
},
}
}
}
要生成的新输出:
{
"Person":{
"personalData": {
"workList": {
"file":[
{ "fileName": "/usr/temp/ABC.txt" }
]
},
"eventList": {
"event": [
{}
]
}
}
}
}
生成的当前JSON输出与需要生成的内容之间的差异:
1&GT;标记文件需要在此处作为数组而不是普通标记。 这是愚蠢的,因为输入标记只有一个值,所以没有点作为数组,但下一步的过程是期望标记为嵌套,因此需要进行更改。
"file":[
{ "fileName": "/usr/temp/ABC.txt" }
]
以下内容:
"file":{
"fileName": "/usr/temp/ABC.txt"
}
2 - ;标签事件列表不存在于输入xml文件中,因此需要硬编码,因此输出JSON始终包含该标记。 (下一步过程需要)。
如果有任何问题,请告诉我。
注意:我可以在JSON中添加新标签,但不能按照我想要的方式添加。
my $tempHash = decode_json($jsonString );
# adding the new key-value pair into the hash map
$tempHash->{'Person'}->{'PersonalData'}->{'workList'}->{$key} = $val;
# encoding the hash map back into JSON
my $jsonWithKey = encode_json($tempHash);
答案 0 :(得分:1)
你无法改变JSON;您可以更改将使用JSON编码的数据结构。由于这是一个Perl问题,我将使用Perl语法来描述这些结构而不是JSON。这应该使你的问题的解决方案显而易见。
您的询问如何更改
{ fileName => "/usr/temp/ABC.txt" }
到
[ { fileName => "/usr/temp/ABC.txt" } ]
它只是
$var = [ $var ];
在上下文中,那是
$data->{Person}{personalData}{workList}{file} =
[ $data->{Person}{personalData}{workList}{file} ];
您正在询问如何更改
{ }
到
{ eventList => { event => [ { } ] } }
将元素添加到引用的哈希只是
$hash_ref->{$key} = $value;
在上下文中,那是
$data->{Person}{eventList} = { event => [ { } ] };