【发布时间】:2019-05-07 05:28:36
【问题描述】:
我们有一个带有返回 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 库的 decode_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 元素的条目,它只显示“真”或“假”。例如。对于此处的 JSON 结果,
0: False
1: False
2: False
3: False
4: True
【问题讨论】:
-
“这不仅看起来更加乱码,而且它没有正确处理某些元素”——对我来说看起来不错。你期待什么? Perl 没有本机布尔类型,因此您会得到
JSON::PP::Boolean对象……而 JSON 中不保证对象属性顺序,Perl 中也不保证哈希键属性顺序。 -
“我似乎无法访问 Dumper 输出或 raw_json 变量的元素”——当然。这两个都是字符串。你需要使用
decode_json()的输出 -
昆汀好吧,那我该怎么做呢?