你沒有發佈的內容不是JSON。鑑於你說這是來自JSON響應,我會猜測這是一個轉置錯誤。如果這是而不是的情況下,這將不起作用 - 但你應該捅人給你的JSON,並告訴他們他們做錯了。
你也應該注意 - 你要求的散列 - 你有intId
中的重複鍵。如果你把它轉換成散列,你將會丟失其中的一個。
然而上述假設:
#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
use Data::Dumper;
my $JSON_text = '[
{
"extId" : "abc:3",
"type" : "Map",
"intId" : "val:0500019141EBE54B"
},
{
"intId" : "val:0500012BEA8FEC15",
"type" : "Map",
"extId" : "abc:4"
},
{
"intId" : "val:0500019141EBE54B",
"type" : "Map",
"extId" : "abc:3"
}
]';
#turn JSON into a perl data structure.
#In this case, an array of anon hashes.
my $json_obj = decode_json ($JSON_text);
print Dumper \$json_obj;
#process that perl data structure, and extract the keys
# use the fact that a list of paired values can be
#assigned to a hash as if they were key-value pairs:
my %int_ext = map { $_ -> {extId},
$_ -> {intId} }
@{$json_obj};
print Dumper \%int_ext;
這使我們%int_ext
哈希:
$VAR1 = {
'abc:3' => 'val:0500019141EBE54B',
'abc:4' => 'val:0500012BEA8FEC15'
};
注 - 因爲你有兩個abc:3
鍵,就 「失去」 他們中的一個。 (第一個被覆蓋,在這種情況下不重要)。
['JSON'](https://metacpan.org/pod/JSON)也許? – TLP
更具體地說,[from_json](https://metacpan.org/pod/JSON#from_json)可以滿足您的需求。 – bytepusher
這不是JSON。在整個過程中,'} {'和缺少'[]'之間缺少逗號。 – choroba