我试图System.Title从下面的 JSON 文件中将值提取到一个变量中。我遇到了“不是数组引用”错误。你能帮我吗?
my $json_text = do {
open(my $json_fh, "<:encoding(UTF-8)", $filename2)
or die("Can't open \$filename2\": $!\n");
local $/;
<$json_fh>
};
my $json = JSON->new;
my $data = $json->decode($json_text);
for ( @{$data->{fields}} ) {
print "$_->{\"System.Title\"}.\"\n\"";
#@witems = "$_->{System.Title}";
push @wtitle,"$_->{\"System.Title\"}";
chomp @wtitle;
#print "@wtitle";
}
Run Code Online (Sandbox Code Playgroud)
JSON 文件内容:
{
"id": 2110,
"fields": {
"System.CommentCount": 1,
"System.Title": "preprocessing with arrays",
"Microsoft.VSTS.Common.ResolvedBy": {
"displayName": "firstname, lastname",
"url": "https://dummyURL.com/4002-8be/_apis/Identities/6d91-9b75",
"_links": {
"avatar": {
"href": "https://azure.com/CARS/_apis/GraphProfile/MemberAvatars/aad.OS03ZDkxLTliN"
}
},
"id": "6d91-9b75",
"descriptor": "aad.OS03ZDkxLTliN"
},
"kanbanboard.Column": "To Do",
"kanbanboard.Column.Done": false
},
"_links": {
"fields": {
"href": "https://azure.com/CARS/ORG-ID/_apis/wit/fields"
}
},
"url": "https://azure.com/CARS/ORG-ID/_apis/wit/workItems/2110"
}
Run Code Online (Sandbox Code Playgroud)
fields 是散列引用,而不是数组引用。
my $json_text = do {
open(my $json_fh, "<:encoding(UTF-8)", $filename2)
or die("Can't open \$filename2\": $!\n");
local $/;
<$json_fh>
};
my $json = JSON->new;
my $data = $json->decode($json_text);
print "$data->{fields}{'System.Title'}\n";
Run Code Online (Sandbox Code Playgroud)
这打印:
preprocessing with arrays
Run Code Online (Sandbox Code Playgroud)
我使用Data::Dumper来显示以下结构$data:
use Data::Dumper;
print Dumper($data);
Run Code Online (Sandbox Code Playgroud)