使用Perl Script在HTTP响应内容中查找值

时间:2015-07-07 12:56:25

标签: regex json string perl

我有带有HTTP GET请求的perl脚本。 我的回复内容就像

$VAR1 = \'{"ResultSet": {
  "result": [
    {
      "rank": "999999",
      "term": "shampoo"
    },
    {
      "rank": "999999",
      "term": "Beauty",
      "url": "/search/results.jsp?Ntt=shampoo&N=359434"
    },
    {
      "rank": "999999",
      "term": "Baby, Kids & Toys",
      "url": "/search/results.jsp?Ntt=shampoo&N=359449"
    },

我需要从上面的url属性响应我怎么能得到它。尝试使用像my $content =~ m/:"url": "(...)"/;这样的正则表达式,但我没有得到url值。请指导。

2 个答案:

答案 0 :(得分:2)

那是JSON。因此,使用B = 1 2 3 1 2 3 1 2 3 4 5 6 4 5 6 4 5 6 7 8 9 7 8 9 7 8 9 0 0 0 9 9 9 4 4 4 模块解析它:

JSON

富勒;可运行的例子:

use JSON; 
my $json = decode_json ( $response -> content ); 
foreach my $element ( @{ $json -> {ResultSet} -> {results} } ) {
    print $element -> {url},"\n"; 
}

在上文中,#!/usr/bin/perl use strict; use warnings; use JSON; use Data::Dumper; my $json_str = '{ "ResultSet": { "result": [ { "rank": "999999", "term": "shampoo" }, { "rank": "999999", "term": "Beauty", "url": "/search/results.jsp?Ntt=shampoo&N=359434" }, { "rank": "999999", "term": "Baby, Kids & Toys", "url": "/search/results.jsp?Ntt=shampoo&N=359449" } ] }}'; my $json = decode_json($json_str); print Dumper $json; foreach my $element ( @{ $json->{ResultSet}->{result} } ) { print $element ->{url}, "\n" if $element->{url}; } 填补了您内容的利基。我假设您有纯文本,上面的输出是$json_str的结果。

因此打印:

print Dumper \$content

答案 1 :(得分:1)

您有对JSON字符串的引用。

首先,获取JSON。

my $json = $$content;

如果您(错误地)执行了Dumper(\$content)而不是Dumper($content),请忽略上述内容并使用以下内容:

my $json = $content;   # Or just use $content where you see $json later.

然后,使用JSON解析来获取数据。

use JSON::XS qw( decode_json );
my $data = decode_json($json);             # If the $json is UTF-8 (probably)
  -or-
use JSON::XS qw( );
my $data = JSON::XS->new->decode($json);   # If the $json is decoded (Unicode Code Points)

现在,您可以轻松获取数据。

my $results = $data->{ResultSet}{result};

for my $result (@$results) {
   my $url = $result->{url}
      or next;

   print("$url\n");
}