嗨,請幫助我嘗試使用 perl 從 Hikvision Face Scan 獲取 AcsEvent。現在資料回傳是。
{
"AcsEvent": {
"searchID": "1",
"responseStatusStrg": "MORE",
"numOfMatches": 5,
"totalMatches": 13430,
"InfoList": [
{
"major": 2,
"minor": 1024,
"time": "2021-12-02T10:45:33 07:00",
"netUser": "",
"remoteHostAddr": "0.0.0.0",
"cardNo": "",
"cardType": 0,
"name": "",
"reportChannel": 0,
"cardReaderKind": 0,
"cardReaderNo": 0,
"doorNo": 0,
"verifyNo": 0,
"alarmInNo": 0,
"alarmOutNo": 0,
"caseSensorNo": 0,
"RS485No": 0,
"multiCardGroupNo": 0,
"deviceNo": 0,
"employeeNoString": "",
"InternetAccess": 0,
"type": 0,
"MACAddr": "",
"swipeCardType": 0,
"serialNo": 1,
"userType": "normal",
"currentVerifyMode": "invalid",
"attendanceStatus": "undefined",
"statusValue": 0,
"mask": "unknown"
},
{
"major": 5,
"minor": 22,
"time": "2021-12-02T10:45:33 07:00",
"netUser": "",
"remoteHostAddr": "0.0.0.0",
"cardNo": "",
"cardType": 0,
"name": "",
"reportChannel": 0,
"cardReaderKind": 0,
"cardReaderNo": 0,
"doorNo": 1,
"verifyNo": 0,
"alarmInNo": 0,
"alarmOutNo": 0,
"caseSensorNo": 0,
"RS485No": 0,
"multiCardGroupNo": 0,
"deviceNo": 0,
"employeeNoString": "",
"InternetAccess": 0,
"type": 0,
"MACAddr": "",
"swipeCardType": 0,
"serialNo": 2,
"userType": "normal",
"currentVerifyMode": "invalid",
"attendanceStatus": "undefined",
"statusValue": 0,
"mask": "unknown"
},
{
"major": 5,
"minor": 75,
"time": "2021-12-02T10:53:49 07:00",
"netUser": "",
"remoteHostAddr": "0.0.0.0",
"cardNo": "",
"cardType": 1,
"name": "user1",
"reportChannel": 0,
"cardReaderKind": 0,
"cardReaderNo": 1,
"doorNo": 1,
"verifyNo": 0,
"alarmInNo": 0,
"alarmOutNo": 0,
"caseSensorNo": 0,
"RS485No": 0,
"multiCardGroupNo": 0,
"deviceNo": 0,
"employeeNoString": "1",
"InternetAccess": 0,
"type": 0,
"MACAddr": "",
"swipeCardType": 0,
"serialNo": 3,
"userType": "normal",
"currentVerifyMode": "cardOrFaceOrFp",
"attendanceStatus": "undefined",
"statusValue": 0,
"mask": "no",
"pictureURL": "http://192.168.1.11:8/LOCALS/pic/acsLinkCap/202112_00/02_105349_30075_0.jpeg@WEB000000000619",
"picturesNumber": 1
},
{
"major": 5,
"minor": 21,
"time": "2021-12-02T10:53:49 07:00",
"netUser": "",
"remoteHostAddr": "0.0.0.0",
"cardNo": "",
"cardType": 0,
"name": "",
"reportChannel": 0,
"cardReaderKind": 0,
"cardReaderNo": 0,
"doorNo": 1,
"verifyNo": 0,
"alarmInNo": 0,
"alarmOutNo": 0,
"caseSensorNo": 0,
"RS485No": 0,
"multiCardGroupNo": 0,
"deviceNo": 0,
"employeeNoString": "",
"InternetAccess": 0,
"type": 0,
"MACAddr": "",
"swipeCardType": 0,
"serialNo": 4,
"userType": "normal",
"currentVerifyMode": "invalid",
"attendanceStatus": "undefined",
"statusValue": 0,
"mask": "unknown"
},
{
"major": 5,
"minor": 75,
"time": "2021-12-02T10:53:52 07:00",
"netUser": "",
"remoteHostAddr": "0.0.0.0",
"cardNo": "",
"cardType": 1,
"name": "user1",
"reportChannel": 0,
"cardReaderKind": 0,
"cardReaderNo": 1,
"doorNo": 1,
"verifyNo": 0,
"alarmInNo": 0,
"alarmOutNo": 0,
"caseSensorNo": 0,
"RS485No": 0,
"multiCardGroupNo": 0,
"deviceNo": 0,
"employeeNoString": "1",
"InternetAccess": 0,
"type": 0,
"MACAddr": "",
"swipeCardType": 0,
"serialNo": 5,
"userType": "normal",
"currentVerifyMode": "cardOrFaceOrFp",
"attendanceStatus": "undefined",
"statusValue": 0,
"mask": "no",
"pictureURL": "http://192.168.1.11:8/LOCALS/pic/acsLinkCap/202112_00/02_105352_30075_0.jpeg@WEB000000000620",
"picturesNumber": 1
}
]
}
}
我需要獲取時間、姓名、cardNo、pictureURL
結果變成了這個樣子。
2021-12-02T10:45:33 07:00 NULL NULL NULL
2021-12-02T10:45:33 07:00 NULL NULL NULL
2021-12-02T10:53:52 07:00 NULL user1 http://192.168.1.11:8/LOCALS/pic/acsLinkCap/202112_00/02_105349_30075_0.jpeg@WEB000000000619
2021-12-02T10:53:49 07:00 NULL NULL NULL
2021-12-02T10:53:52 07:00 NULL user1 http://192.168.1.11:8/LOCALS/pic/acsLinkCap/202112_00/02_105352_30075_0.jpeg@WEB000000000620
我該怎么辦。謝謝
編輯我可以由 Dave Cross 修復它。現在在這里我的代碼。
#!/bin/perl
use JSON;
use feature qw(say);
use strict;
use warnings;
my $json = '{
"AcsEvent": {
"searchID": "1",
"responseStatusStrg": "MORE",
"numOfMatches": 5,
"totalMatches": 13430,
"InfoList": [
{
....cut off data ......
}
]
}
}';
my $data = JSON->new->decode($json);
my @infolist = @{ $data->{AcsEvent}{InfoList} };
for my $item (@infolist) {
say $item->{time};
say $item->{cardNo};
say $item->{name};
say $item->{pictureURL};
}
uj5u.com熱心網友回復:
因此,您有一個包含 JSON 編碼資料結構的文本字串。首先要做的是將其轉換為 Perl 資料結構。我們可以使用JSON模塊來做到這一點。
use JSON;
# Assuming that you've got your JSON text in $json
my $data = JSON->new->decode($json);
您的$data變數現在包含一個哈希參考。您可以看出它將是一個哈希參考,因為 JSON 文本包含在{ ... }.
您想要使用InfoListJSON 的部分。我們可以通過在資料結構中查找幾個鍵來獲得它。
my @infolist = @{ $data->{AcsEvent}{InfoList} };
請注意,這$data->{AcsEvent}{InfoList}是一個陣列參考(我們可以知道,因為它被 包圍[ ... ])。因此我們可以取消參考并將其存盤在陣列變數 ( @infolist) 中。
現在,這只是一個遍歷新陣列的情況。陣列的每個元素都是一個哈希參考,因此我們可以非常簡單地提取我們想要的資訊。
for my $item (@infolist) {
say $item->{time};
}
填寫輸出的其余部分留給讀者作為練習。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425574.html
上一篇:將CatalystX::I18N::Maketext添加到我的DBIC模式
下一篇:從每個單元格中洗掉重復項
