使用 Perl 从 JSON 中提取 System.Title

Ras*_*Ras 1 perl

我试图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)

too*_*lic 5

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)