[英]Parsing a JSON string in Perl
我們有一台帶有返回JSON字符串的API的設備。 我希望能夠訪問JSON的特定部分,但是我不知道如何使語法起作用。
use strict;
use warnings;
use CGI qw(:standard);
use LWP::Simple;
use JSON qw(decode_json);
use Data::Dumper;
my $json_request = 'http://<device ip>/API?method=Display:Input:Status:All:Get';
my $raw_json = get $(json_request)
print($raw_json)
# Output: {"result":{"0":{"status":false},"1":{"status":false},"2":{"status":false},"3":{"status":false},"4":{"type":"unknown","status":true}},"jsonrpc":"2.0"}
我已經嘗試過使用JSON庫的encode_json函數以及Data :: Dumper,但這是我得到的:
print(Dumper(decode_json($raw_json)));
# Output: $VAR1 = { 'jsonrpc' => '2.0', 'result' => { '4' => { 'status' => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' ), 'type' => 'unknown' }, '1' => { 'status' => bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' ) }, '3' => { 'status' => $VAR1->{'result'}{'1'}{'status'} }, '0' => { 'status' => $VAR1->{'result'}{'1'}{'status'} }, '2' => { 'status' => $VAR1->{'result'}{'1'}{'status'} } } };
這不僅看起來更加混亂,而且無法正確處理某些元素,而且我似乎無法訪問Dumper輸出或raw_json變量的元素。 我當然不熟悉Perl,但是我嘗試了所有我能想到的語法,但我無法弄清楚。
我希望能夠有一個表,該表具有從0到4行的表,該表根據特定JSON元素的條目說“ true”或“ false”。 此處為JSON結果的EG,
0: False
1: False
2: False
3: False
4: True
我不確定您的意思,據我所知,JSON包含您要提取的所有數據:
$ echo '{"result":{"0":{"status":false},"1":{"status":false},"2":{"status":false},"3":{"status":false},"4":{"type":"unknown","status":true}},"jsonrpc":"2.0"}' | json_pp
{
"jsonrpc" : "2.0",
"result" : {
"0" : {
"status" : false
},
"4" : {
"type" : "unknown",
"status" : true
},
"1" : {
"status" : false
},
"3" : {
"status" : false
},
"2" : {
"status" : false
}
}
}
也許您不了解如何正確訪問它? 以下代碼似乎有效:
#!/usr/bin/perl
use strict;
use warnings;
use JSON qw(decode_json);
my $raw_json = '{"result":{"0":{"status":false},"1":{"status":false},"2":{"status":false},"3":{"status":false},"4":{"type":"unknown","status":true}},"jsonrpc":"2.0"}';
print "${raw_json}\n";
my $object = decode_json($raw_json)
or die "JSON parse error\n";
my $result = $object->{result};
die "No result object found\n"
unless $result;
foreach my $key (sort keys %{$result}) {
print "${key}: ", $result->{$key}->{status} ? "True": "False", "\n";
}
exit 0;
輸出:
{"result":{"0":{"status":false},"1":{"status":false},"2":{"status":false},"3":{"status":false},"4":{"type":"unknown","status":true}},"jsonrpc":"2.0"}
0: False
1: False
2: False
3: False
4: True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.