[英]How can I create a hash from json response in perl
我有一个json响应,例如
{
"extId" : "abc:3",
"intId" : "val:0500019141EBE54B",
"type" : "Map"
}{
"extId" : "abc:4",
"intId" : "val:0500012BEA8FEC15",
"type" : "Map"
}{
"extId" : "abc:3",
"intId" : "val:0500019141EBE54B",
"type" : "Map"
}
我想创建一个哈希,例如$hash{abc:3} = val:0500019141EBE54B
,这样我可以验证是否为相同的intId
创建了相同的extId
。 感谢帮助。
use Data::Dumper;
my @data = <DATA>;
s/[\r\n\s{}",]//g, s/(ext|int)Id:|type:Map// for @data;
my %hash = grep length, @data;
print Dumper \%hash;
__DATA__
{
"extId" : "abc:3",
"intId" : "val:0500019141EBE54B",
"type" : "Map"
}{
"extId" : "abc:4",
"intId" : "val:0500012BEA8FEC15",
"type" : "Map"
}{
"extId" : "abc:3",
"intId" : "val:0500019141EBE54B",
"type" : "Map"
}
请注意,字段(extId,intId)是必填项。
您尚未发布的不是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
键,因此您将“丢失”其中一个。 (第一个被覆盖,在这种情况下并不重要)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.