Perl:结合两个JSON

时间:2017-08-25 23:53:47

标签: json perl

我正在寻找帮助/指导,根据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'}});

非常感谢任何帮助。 谢谢。

1 个答案:

答案 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} };