代码之家  ›  专栏  ›  技术社区  ›  Boontawee Home

Perl如何在没有特定中间键(通配符)的情况下访问嵌套哈希的值

  •  0
  • Boontawee Home  · 技术社区  · 2 年前

    我试图获取facebook手机上的帖子。

    $VAR1 = {
        "mf_story_key" => "225164133113094",
        "page_id" => "102820022014173",
        "page_insights" => {
             "102820022014173" => {
                 "actor_id" => "102820022014173",
                 "page_id" => "102820022014173",
                 "page_id_type" => "page",
                 "post_context" => {
                      "publish_time" => "1641702174",
                      "story_name" => "EntStatusCreationStory"
                 },
                 "psn" => "EntStatusCreationStory",
                 "role" => 1,
             }
        },
        "story_attachment_style" => "album",
    };
    
    $publish_time = $VAR1->{page_insights}{102820022014173}{post_context}{publish_time};
    

    如果102820022014173是一个动态值,我如何访问publish_time值而不指定它?

    1 回复  |  直到 2 年前
        1
  •  3
  •   Andy Lester    2 年前

    你需要得到 keys 到page_insights散列,然后对它们进行迭代。

    use strict;
    use warnings;
    use 5.010;
    
    my $post = {
        "mf_story_key" => "225164133113094",
        "page_id" => "102820022014173",
        "page_insights" => {
            "102820022014173" => {
                "actor_id" => "102820022014173",
                "page_id" => "102820022014173",
                "page_id_type" => "page",
                "post_context" => {
                    "publish_time" => "1641702174",
                    "story_name" => "EntStatusCreationStory"
                },
                "psn" => "EntStatusCreationStory",
                "role" => 1,
            }
        },
        "story_attachment_style" => "album",
    };
    
    my $insights = $post->{page_insights};
    
    my @insight_ids = keys %{$insights};
    
    for my $id ( @insight_ids ) {
        say "ID $id was published at ",
            $insights->{$id}{post_context}{publish_time};
    }
    

    给予

    ID 102820022014173 was published at 1641702174
    
        2
  •  2
  •   ikegami    2 年前
    for my $page_insight ( values( %{ $VAR1->{page_insights} } ) ) {
       my $publish_time = $page_insight->{post_context}{publish_time};
    
       ...
    }
    

    如果总是有一个元素,

    my $page_insight = ( values( %{ $VAR1->{page_insights} } )[0];
    my $publish_time = $page_insight->{post_context}{publish_time};
    ...
    

    (如果你愿意,你可以把这两种说法结合起来。)