2017-08-25 13 views
-1

PERLのノードに基づいて1つのJSONに複数のJSONを結合するためのヘルプ/ガイダンスを探しています。例えば、私が結合したい2つのJSONコンテンツがあります。Perl:2つの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"}] 
     } 
    ] 
} 

RESULTの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'}}); 

すべてのヘルプははるかに高く評価されています は、ここで私が試したコードです。 ありがとうございます。

答えて

2
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} }; 
+0

おかげで応答を@ikegami。 私は次のように 'my $ final = encode_json(\ @ myJSON);'を試みました。これが問題の解決に役立ちました。 –

関連する問題