2013-01-11 23 views
0

讓應用程序返回部分JSON響應,如何將對象/變量合併爲一個?如何將部分JSON結果合併到一個對象/變量中?


我使用

$json = JSON->new->utf8->decode($response->content); 

轉換成響應對象/變量,但是這是爲每個單獨的一個。


現在我需要它將幾個部分響應合併爲一個。

如何做到這一點,以及如何處理可能的重複項目,以避免覆蓋?


UPDATE:

爲了更好地理解上述問題,請參見下面示例響應。

每個部分響應具有相同的結構,但在'Groups'不同的數據,'Message''Data'部分。最後的回覆附帶'Finished' = true

$VAR1 = { 
    'answer' => { 
    'Error' => bless(do{\(my $o = 0)}, 'JSON::XS::Boolean'), 
    'Id' => 12345, 
    'Finished' => $VAR1->{'answer'}{'Error'}, 
    'Groups' => [ 
     { 
     'Code' => 'ABC', 
     'RegNum' => 123, 
     'Name' => 'John Doe' 
     }, 
     { 
     ... 
     } 
    ], 
    'Message' => undef, 
    'Data' => [ 
     { 
     'Column1' => 'c1', 
     'Column2' => 'c2' 
     }, 
     { 
     ... 
     } 
    ], 
    } 
} 
+0

[Hash :: Merge](http://search.cpan.org/~dmuey/Hash-Merge-0.12/Merge.pm)? – alex

+1

如果您確實有部分JSON回覆,請稍等。如果您的JSON是完整的,但僅代表您的數據結構的一部分,那麼這與JSON無關,並且您根本沒有提供關於您的問題的任何信息。我們需要更多地瞭解您的數據結構以瞭解如何合併它。 – ikegami

+0

@ikegami - 我已經用應該澄清的例子更新了這個問題。謝謝! –

回答

0

合併哈希這有絕對無關,與JSON。你想合併兩個數據結構。從你所說的那一點,有三個數組合並。你沒有指定如何,所以你可能只是想將新響應的元素附加到原始響應的元素上。

for (qw(Groups Message Data)) { 
    push @{ $orig->{answer}{$_} }, @{ $new->{answer}{$_} } 
     if $new->{answer}{$_}; 
} 
相關問題