2

これが私のサブルーチンです:

my $json = JSON->new;
my $decoded_json = from_json( $response->decoded_content, { utf8  => 1 } );

print Dumper($decoded_json->{"response"}->{"recs"}->{"objs"}, length($decoded_json->{"response"}->{"recs"}->{"objs"})) . "\r\n";
foreach($decoded_json->{"response"}->{"recs"}->{"objs"}) {
    # need to get name..
    #print Dumper($_, length($_)) . "\r\n";
}

私はウェブサイト(実際にはCloudFlare)からJSONを取得し、データを解析しようとしています。これはJSONの例です。それぞれの結果から「名前」を取得しようとしていますが、「名前」が必要な場合は、別のフィールドを取得します。

     'response' => {
                      'recs' => {
                                  'count' => 4,
                                  'has_more' => bless( do{\(my $o = 0)}, 'JSON::XS::Boolean' ),
                                  'objs' => [
                                              {# <-- these
                                                'ttl_ceil' => 86400,
                                                'ttl' => '1',
                                                'content' => '[SNIPPED]',
                                                'zone_name' => 'xyz.info',
                                                'display_content' => '[SNIPPED]',
                                                'ssl_status' => undef,
                                                'name' => 'xyz.info',
                                                'prio' => undef,
                                                'auto_ttl' => 1,
                                                'display_name' => 'xyz.info',
                                                'props' => {
                                                             'pending_ssl' => 0,
                                                             'cf_open' => 0,
                                                             'proxiable' => 1,
                                                             'expired_ssl' => 0,
                                                             'ssl' => 0,
                                                             'vanity_lock' => 0,
                                                             'expiring_ssl' => 0,
                                                             'cloud_on' => 1
                                                           },
                                                'rec_tag' => '[SNIPPED]',
                                                'rec_id' => '[SNIPPED]',
                                                'type' => 'A',
                                                'ssl_id' => undef,
                                                'ssl_expires_on' => undef,
                                                'service_mode' => '1'
                                              },
                                              { # < -- these
                                                'ttl_ceil' => 86400,
                                                'ttl' => '1',
                                                'content' => '0.0.0.0',
                                                'zone_name' => 'xyz.info',
                                                'display_content' => '0.0.0.0',
                                                'ssl_status' => undef,
                                                'name' => 'zzz.xyz.info',
                                                'prio' => undef,
                                                'auto_ttl' => 1,
                                                'display_name' => 'zzz',
                                                'props' => {
                                                             'pending_ssl' => 0,
                                                             'cf_open' => 0,
                                                             'proxiable' => 1,
                                                             'expired_ssl' => 0,
                                                             'ssl' => 0,
                                                             'vanity_lock' => 0,
                                                             'expiring_ssl' => 0,
                                                             'cloud_on' => 1
                                                           },
                                                'rec_tag' => '[SNIPPED]',
                                                'rec_id' => '[SNIPPED]',
                                                'type' => 'A',
                                                'ssl_id' => undef,
                                                'ssl_expires_on' => undef,
                                                'service_mode' => '1'
                                              },
                    },
      'result' => 'success'
    };
4

1 に答える 1

1

参照されている配列の内容ではなく、参照(単一のスカラー)を反復処理しています。

foreach (@{ $decoded_json->{response}{recs}{objs} })
         ^^                                       ^
于 2012-11-25T17:57:25.483 に答える