在 perl 中使用更新 JSON 标签格式
Updating JSON tags format using in perl
我有一个从 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> 这里要追求标签文件是一个数组,而不是普通的标签。
这是愚蠢的,因为输入标签只有一个值,所以没有点作为数组,但下一步过程期望标签嵌套,因此需要进行更改。
"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);
你无法改变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 => [ { } ] };
我有一个从 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> 这里要追求标签文件是一个数组,而不是普通的标签。 这是愚蠢的,因为输入标签只有一个值,所以没有点作为数组,但下一步过程期望标签嵌套,因此需要进行更改。
"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);
你无法改变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 => [ { } ] };