Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 解析此类数据_Perl_Object - Fatal编程技术网

Perl 解析此类数据

Perl 解析此类数据,perl,object,Perl,Object,我已经为API编写了一个包装器。之前,我使用Perl处理了对PHP脚本的简单基于字符串的GET请求 作为分析响应的一部分,我必须分析以下数据,这些数据似乎是一个对象。不幸的是,我不知道如何从中提取可用数据 数据上的打印转储程序返回以下内容: $VAR1 = bless( { '_rc' => '200', '_request' => bless( { '_uri_canonical' => bless( do{

我已经为API编写了一个包装器。之前,我使用Perl处理了对PHP脚本的简单基于字符串的GET请求

作为分析响应的一部分,我必须分析以下数据,这些数据似乎是一个对象。不幸的是,我不知道如何从中提取可用数据

数据上的打印转储程序返回以下内容:

$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,我在野外从未见过后两者。