我有带有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值。请指导。
答案 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");
}