我正在寻找帮助/指导,根据PERL中的节点将多个JSON组合成1个JSON。例如,这里是我想要组合的两个JSON内容。
JSON#1:
{
"title": "All",
"lastModified": "2017-04-11T00:00:00.000+0000",
"users": [{
"name": "Alpha One",
"title": "Security Chief",
"locations": [{"id": "730WLCS"}, {"id": "943MCS"}]
},
{
"name": "Alpha Two",
"title": "Security Manager"
}
]
}
JSON#2:
{
"title": "All",
"lastModified": "2017-04-11T00:00:00.000+0000",
"users": [{
"name": "Beta One",
"title": "Architect",
"locations": [{"id": "730WLCS"}]
}
]
}
结果JSON:
{
"title": "All",
"lastModified": "2017-04-11T00:00:00.000+0000",
"users": [{
"name": "Alpha One",
"title": "Security Chief",
"locations": [{"id": "730WLCS"}, {"id": "943MCS"}]
},
{
"name": "Alpha Two",
"title": "Security Manager"
},
{
"name": "Beta One",
"title": "Architect",
"locations": [{"id": "730WLCS"}]
}
]
}
基本上,我想只结合"用户"节点。
我尝试使用from_json获取节点并尝试推入数组,但它无法正常工作。 这是我试过的代码:
my $json_obj1 = from_json($json_txt1, {utf8 => 1});
my $json_obj2 = from_json($json_txt2, {utf8 => 1});
push(@myJSON, @{$json_obj1->{'users'}});
push(@myJSON, @{$json_obj2->{'users'}});
非常感谢任何帮助。 谢谢。
答案 0 :(得分:3)
my $json_obj1 = decode_json($json_txt1); # Same as from_json($json_txt1, {utf8 => 1})
my $json_obj2 = decode_json($json_txt2);
push @{ $json_obj2->{users} }, @{ $json_obj1->{users} };
如果要删除重复项,保留较新的记录(假设$json_obj1
为旧状态),则可以使用以下内容:
my %seen;
@{ $json_obj2->{users} } =
grep !$seen{$_->{name}}++,
@{ $json_obj2->{users} },
@{ $json_obj1->{users} };