簡體   English   中英

通過Perl Vk.com API JSON響應進行解析

[英]parse by Perl Vk.com API JSON response

我向vk.com('wall.get')發出api請求,它以JSON返回響應。

我使用的模塊:

use VK::App;
use JSON qw( decode_json );
use Data::Dumper;
use JSON::XS;

完整回應:

{"response":[1696,{"id":9298,"from_id":-95784908,"to_id":-95784908,"date":1468314922,"marked_as_ads":0,"post_type":"post","text":"Пока рэпера придумывaют нoвые истории,<br>О чем же им написaть  я выпью алкоголя.","signer_id":305317129,"can_edit":1,"created_by":305317129,"can_delete":1,"can_pin":1,"media":{"type":"audio","owner_id":2000355235,"item_id":456239648},"attachment":{"type":"photo","photo":{"pid":426327566,"aid":-7,"owner_id":-95784908,"user_id":100,"src":"https:\/\/pp.vk.me\/c633131\/v633131850\/39ece\/lnz0Bz1WuLs.jpg","src_big":"https:\/\/pp.vk.me\/c633131\/v633131850\/39ecf\/yRnLIcZbUNI.jpg","src_small":"https:\/\/pp.vk.me\/c633131\/v633131850\/39ecd\/EESnBXYilMI.jpg","src_xbig":"https:\/\/pp.vk.me\/c633131\/v633131850\/39ed0\/RNR8FS9CNjg.jpg","src_xxbig":"https:\/\/pp.vk.me\/c633131\/v633131850\/39ed1\/pXN8-5o7szc.jpg","width":960,"height":959,"text":"","created":1468281534,"access_key":"fef98dd6d847faf868"}},"attachments":[{"type":"photo","photo":{"pid":426327566,"aid":-7,"owner_id":-95784908,"user_id":100,"src":"https:\/\/pp.vk.me\/c633131\/v633131850\/39ece\/lnz0Bz1WuLs.jpg","src_big":"https:\/\/pp.vk.me\/c633131\/v633131850\/39ecf\/yRnLIcZbUNI.jpg","src_small":"https:\/\/pp.vk.me\/c633131\/v633131850\/39ecd\/EESnBXYilMI.jpg","src_xbig":"https:\/\/pp.vk.me\/c633131\/v633131850\/39ed0\/RNR8FS9CNjg.jpg","src_xxbig":"https:\/\/pp.vk.me\/c633131\/v633131850\/39ed1\/pXN8-5o7szc.jpg","width":960,"height":959,"text":"","created":1468281534,"access_key":"fef98dd6d847faf868"}},{"type":"audio","audio":{"aid":456239648,"owner_id":2000355235,"artist":"Костик ИзХабарэ","title":"ЗаМКАДыш","duration":211,"url":"https:\/\/cs1-43v4.vk-cdn.net\/p14\/5c654491198674.mp3?extra=alCnXJlE-kVhqAR-FhYkeLc3VfVrav607YQqc6RhT--YU-qDG_HlcajsiUqvu9t746CXm57LkPkPLrlG98-Ay72LgAiHjAjBiw1ziotmhGH4n6s9zcs4VPGpGUpgDnhmkHWGxYoG4Nwgt2Q","performer":"Костик ИзХабарэ","album":"2","genre":18}}],"post_source":{"type":"vk"},"comments":{"count":0,"can_post":1},"likes":{"count":0,"user_likes":0,"can_like":1,"can_publish":1},"reposts":{"count":0,"user_reposted":0},"online":0,"reply_count":0}]}

我需要解析'text =>'之后的文本

在Data :: Dumper;之后

$VAR1 = {
          'response' => [
                          1696,
                          {
                            'comments' => {
                                            'can_post' => 1,
                                            'count' => 2
                                          },
                            'attachments' => [
                                               {
                                                 'type' => 'photo',
                                                 'photo' => {
                                                              'aid' => -7,
                                                              'lat' => '55.836657',
                                                              'created' => 1468232107,
                                                              'height' => 719,
                                                              'owner_id' => -95784908,
                                                              'text' => '',
                                                              'long' => '37.38596',
                                                              'src_big' => 'https://pp.vk.me/c633917/v633917838/3d4e7/8uk9QZ0X0ew.jpg',
                                                              'src' => 'https://pp.vk.me/c633917/v633917838/3d4e6/JwQKaOWs2zM.jpg',
                                                              'access_key' => '290371f54b8b5df024',
                                                              'src_xbig' => 'https://pp.vk.me/c633917/v633917838/3d4e8/4hqv0_AH6wE.jpg',
                                                              'width' => 960,
                                                              'pid' => 426222993,
                                                              'post_id' => 9262,
                                                              'src_xxbig' => 'https://pp.vk.me/c633917/v633917838/3d4e9/u4oI4yaWF50.jpg',
                                                              'src_small' => 'https://pp.vk.me/c633917/v633917838/3d4e5/oq8kQ_qt5cM.jpg',
                                                              'user_id' => 100
                                                            }
                                               }
                                             ],
                            'post_type' => 'post',
                            'to_id' => -95784908,
                            'created_by' => 57565838,
                            'attachment' => {
                                              'type' => 'photo',
                                              'photo' => {
                                                           'long' => '37.38596',
                                                           'text' => '',
                                                           'src_big' => 'https://pp.vk.me/c633917/v633917838/3d4e7/8uk9QZ0X0ew.jpg',
                                                           'src' => 'https://pp.vk.me/c633917/v633917838/3d4e6/JwQKaOWs2zM.jpg',
                                                           'access_key' => '290371f54b8b5df024',
                                                           'src_xbig' => 'https://pp.vk.me/c633917/v633917838/3d4e8/4hqv0_AH6wE.jpg',
                                                           'lat' => '55.836657',
                                                           'aid' => -7,
                                                           'created' => 1468232107,
                                                           'height' => 719,
                                                           'owner_id' => -95784908,
                                                           'src_xxbig' => 'https://pp.vk.me/c633917/v633917838/3d4e9/u4oI4yaWF50.jpg',
                                                           'src_small' => 'https://pp.vk.me/c633917/v633917838/3d4e5/oq8kQ_qt5cM.jpg',
                                                           'user_id' => 100,
                                                           'width' => 960,
                                                           'pid' => 426222993,
                                                           'post_id' => 9262
                                                         }
                                            },
                            'likes' => {
                                         'count' => 0,
                                         'can_publish' => 1,
                                         'user_likes' => 0,
                                         'can_like' => 1
                                       },
                            'can_delete' => 1,
                            'text' => "\x{41a}\x{43e}\x{43c}\x{443} \x{43d}\x{443}\x{436}\x{43d}\x{43e}? \x{423} \x{43c}\x{435}\x{43d}\x{44f} 15 \x{431}\x{438}\x{43b}\x{435}\x{442}\x{43e}\x{432})",
                            'online' => 1,
                            'id' => 9263,
                            'from_id' => -95784908,
                            'media' => {
                                         'item_id' => 426222993,
                                         'type' => 'photo',
                                         'thumb_src' => 'https://pp.vk.me/c633917/v633917838/3d4e6/JwQKaOWs2zM.jpg',
                                         'owner_id' => -95784908
                                       },
                            'date' => 1468232695,
                            'reposts' => {
                                           'count' => 0,
                                           'user_reposted' => 0
                                         },
                            'marked_as_ads' => 0,
                            'can_edit' => 1,
                            'can_pin' => 1,
                            'post_source' => {
                                               'type' => 'vk'
                                             },
                            'signer_id' => 57565838,
                            'reply_count' => 2
                          }
                        ]
        };
my $msg = GetWallPost(); # request
$msg = Dumper($msg);
print $msg;

如果嘗試使用JSON進行解析; 或使用JSON :: XS;

my $msg = GetWallPost();
my $decode= JSON->new->decode($msg); or 
my $decode = JSON::XS->new->utf8->decode ($msg); or
my $decode = decode_json($msg); 
print $decode->{'response'}[0]{'test'}; get an err ->
Can't use string ("1702") as a HASH ref while "strict refs" in use at ./testhash.pl line 47.

那如果我嘗試過->

print $decode->{'response'}{'text'}; get an err ->
Not a HASH reference at ./testhash.pl line 47.

如果我在Data :: Dumper之后用$ msg做同樣的事情; 我得到這個錯誤->

Can't use string ("$VAR1 = {
         'response' ="...) as a HASH ref while "strict refs" in use at ./testhash.pl line 42.

主要問題-如何解析“文本”之后的數據,我需要在$ msg中使用明文。 謝謝

但是當然。 ->response顯然是一個數組,由JSON中的[]表示。 您需要$decode->{response}[1]{text}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM