Perl 解析此类数据
我已经为API编写了一个包装器。之前,我使用Perl处理了对PHP脚本的简单基于字符串的GET请求 作为分析响应的一部分,我必须分析以下数据,这些数据似乎是一个对象。不幸的是,我不知道如何从中提取可用数据 数据上的打印转储程序返回以下内容:Perl 解析此类数据,perl,object,Perl,Object,我已经为API编写了一个包装器。之前,我使用Perl处理了对PHP脚本的简单基于字符串的GET请求 作为分析响应的一部分,我必须分析以下数据,这些数据似乎是一个对象。不幸的是,我不知道如何从中提取可用数据 数据上的打印转储程序返回以下内容: $VAR1 = bless( { '_rc' => '200', '_request' => bless( { '_uri_canonical' => bless( do{
$VAR1 = bless( {
'_rc' => '200',
'_request' => bless( {
'_uri_canonical' => bless( do{\(my $o = 'http://example.com/?list=1&token=h_DQ-3lru6uy_Zy0w-KXGbPm_b9llY3LAAAAALSF1roAAAAANxAtg49JqlUAAAAA')}, 'URI::http' ),
'_content' => '',
'_uri' => $VAR1->{'_request'}{'_uri_canonical'},
'_method' => 'GET',
'_headers' => bless( {
'accept-charset' => 'iso-8859-1,*,utf-8',
'accept' => 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*',
'cookie' => 'GUID=cHoW3DLOljP4K9LzposM',
'user-agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20041107 Firefox/1.0',
'authorization' => 'Basic YWRtaW46bmljb2xl',
'cookie2' => '$Version="1"',
'::std_case' => {
'cookie' => 'Cookie',
'cookie2' => 'Cookie2'
},
'accept-language' => 'en-US'
}, 'HTTP::Headers' )
}, 'HTTP::Request' ),
'_headers' => bless( {
'client-peer' => 'myip:8085',
'content-type' => 'text/plain',
'cache-control' => 'no-cache',
'connection' => 'keep-alive',
'client-date' => 'Sat, 18 Jul 2015 12:41:00 GMT',
'::std_case' => {
'client-response-num' => 'Client-Response-Num',
'set-cookie2' => 'Set-Cookie2',
'client-date' => 'Client-Date',
'client-peer' => 'Client-Peer',
'set-cookie' => 'Set-Cookie'
},
'client-response-num' => 1,
'content-length' => '8684'
}, 'HTTP::Headers' ),
'_msg' => 'OK',
'_protocol' => 'HTTP/1.1',
'_content' => '{"build":30470,"torrents": [
["043CC5FA0C741CDAD9D2E5CC20DF64A4A400FA34",136,"Epi.S01E03.720p.HDTV.x264-IMMERSE[rarbg]",690765843,39,26951680,671744,24,0,0,0,"",0,1454,0,114,2436,1,663814163,"","","Stopped","512840d7",1437022635,0,"","/mydir/Epi.S01E03.720p.HDTV.x264-IMMERSE[rarbg]",0,"0368737A",false],
["097AA60280AE3E4BA8741192CB015EE06BD9F992",200,"Epi.S01E04.HDTV.x264-KILLERS[ettv]",221928759,1000,221928759,8890308649,40059,0,0,0,"",0,1461,0,4395,65536,-1,0,"","","Queued Seed","512840d8",1437022635,1437023190,"","/mydir/Epi.S01E04.HDTV.x264-KILLERS[ettv]",0,"8F52310A",false]],
"label": [],"torrentc": "350372445"
,"rssfeeds": []
,"rssfilters": []
}
',
'_msg' => 'OK',
'_protocol' => 'HTTP/1.1'
}, 'HTTP::Response' );
我想从返回的对象中提取以下每个字符串
097AA60280AE3E4BA8741192CB015EE06BD9F992
200
Epi.S01E04.HDTV.x264-KILLERS[ettv]
不幸的是,我对Perl中对象的理解非常初级
返回此数据的原始代码如下所示:
my $ua = LWP::UserAgent->new();
my $response = $ua->get( $url, @ns_headers );
print Dumper($response);
如何处理感兴趣的字符串?如果您阅读了,您将看到有一个content
方法,它将返回HTTP消息的内容,还有一个decoded_content
方法,它执行相同的操作,但如果数据被压缩(在您的情况下,数据是未压缩的),它也会解压缩数据
在本例中,内容似乎编码为JSON数据,因此还需要加载模块将其解码为Perl数据结构
比如说
使用JSON'from_JSON';
my$content=来自\u json$response->解码的\u内容;
my$torrents=$content->{torrents};
对于我的$torrent(@$torrents){
比如说$torrent[0,1,2];
说“”;
}
输出
043CC5FA0C741CDAD9D2E5CC20DF64A4A400FA34
136
Epi.S01E03.720p.HDTV.x264浸入式[rarbg]
097AA60280AE3E4BA8741192CB015EE06BD9F992
200
Epi.S01E04.HDTV.x264杀手[ettv]
如果您阅读,您将看到有一个content
方法,它将返回HTTP消息的内容,还有一个decoded_content
方法,它执行相同的操作,但如果数据被压缩,也会解压缩数据(在您的情况下,数据是未压缩的)
在本例中,内容似乎编码为JSON数据,因此还需要加载模块将其解码为Perl数据结构
比如说
使用JSON'from_JSON';
my$content=来自\u json$response->解码的\u内容;
my$torrents=$content->{torrents};
对于我的$torrent(@$torrents){
比如说$torrent[0,1,2];
说“”;
}
输出
043CC5FA0C741CDAD9D2E5CC20DF64A4A400FA34
136
Epi.S01E03.720p.HDTV.x264浸入式[rarbg]
097AA60280AE3E4BA8741192CB015EE06BD9F992
200
Epi.S01E04.HDTV.x264杀手[ettv]
您看到的是一个HTTP::Response
对象,从中访问数据的正确方法是调用HTTP::Response
对象中所述的方法,从中访问数据的正确方法是调用其方法,如您希望decode\u json
中所述,而不是from\u json
(或解码内容
而不是内容
)。有什么不同的效果?@melpomene:decoded_content
返回根据content Encoding
HTTP标头中指定的方法解压缩的邮件正文。decode_json
解码UTF-8编码的json字符串。两者都不适用于此处不完全正确;decoded_content
还解码文本根据内容。重点是HTTP上的JSON几乎都是UTF-8编码的,你需要以某种方式处理content
返回bytestrings,但from_JSON
采用unicode文本。说你应该使用UTF-8、UTF-16或UTF-32,我在野外从未见过后两者。你想要解码_JSON
,而不是来自json的(或解码的内容
而不是内容
)。有什么不同的效果?@melpomene:decoded_content
返回根据content Encoding
HTTP标头中指定的方法解压缩的邮件正文。decode_json
解码UTF-8编码的json字符串。两者都不适用于此处不完全正确;decoded_content
还解码文本根据内容。关键是HTTP上的JSON几乎都是UTF-8编码的,您需要以某种方式处理content
返回bytestrings,但from_JSON
采用unicode文本。据说您应该使用UTF-8、UTF-16或UTF-32,我在野外从未见过后两者。