首页 > 解决方案 > 如何在不使用正则表达式或拆分的情况下将字符串转换为 perl 中的哈希

问题描述

我有一个我无法控制的函数,它返回一个实际上是哈希的字符串。它看起来像下面这样:

{"offset":0,"limit":500,"count":0,"virtual_machines":[]}

我需要检查计数是否大于 0。因为输出是字符串而不是哈希,所以我试图拆分字符串并从中获取输出。

相同的片段如下:

my $output = '{"offset":0,"limit":500,"count":0,"virtual_machines":[]}';
$output =~ s/ +/ /g;
my @words = split /[:,"\s\/]+/, $output;
print Dumper(@words);

输出是:

$VAR1 = '{';
$VAR2 = 'offset';
$VAR3 = '0';
$VAR4 = 'limit';
$VAR5 = '500';
$VAR6 = 'count';
$VAR7 = '0';
$VAR8 = 'virtual_machines';
$VAR9 = '[]}';

现在,我可以获得价值 $VAR7 并获得计数。

有没有办法将字符串转换为哈希,然后使用键来获取值,而不是使用正则表达式和拆分。有人可以帮我吗!

标签: jsonregexperl

解决方案


该字符串采用 JSON 格式。我只是做

use strict;
use warnings;
use JSON::PP qw(decode_json);

my $output = '{"offset":0,"limit":500,"count":0,"virtual_machines":[]}';
my $data = decode_json $output;

print $data->{count}, "\n";

推荐阅读