我正在尝试将字符串与另一个字符串进行比较。
如果它是包含内容的JSON结构,我想打印“包含内容”。 如果它是一个不包含东西的JSON结构,我打印“空” 如果它不在花括号“{}”之间,我会打印出错误。
这就是我所做的:
if($content =~ m/{.+}/){
print "Contains things \n";
} elsif($content eq "{}"){
$job_status{$url}="";
print "empty \n";
} else {
print "Error \n";
}
当我将“{}”传递给变量$ content时,他不会输入“elsif”,而是转到“else”,并抛出错误。 我试图在if中加上“==”而不是“eq”,即使我知道这是数字。这样,他进入“elsif”,并打印出“空”,就像他应该用“eq”一样,并抛出:
Argument "{}" isn't numeric in numeric eq (==)".
我可以使用JSON库,但我不喜欢。
感谢您的帮助!
Bidy
答案 0 :(得分:1)
它对我有用。 $content
是否有换行符?试试chomp $content;
。
use warnings;
use strict;
my $content = '{}';
if($content =~ m/{.+}/){
print "Contains things \n";
} elsif($content eq "{}"){
print "empty \n";
} else {
print "Error \n";
}
__END__
empty
答案 1 :(得分:1)
如果我在{}
:
#!/usr/bin/perl
use strict;
use warnings;
my $content = "{}\n";
if($content =~ m/{.+}/){
print "Contains things \n";
} elsif($content eq "{}"){
print "empty \n";
} else {
print "Error \n";
}
如果我将eq
替换为==
,则返回"错误",它返回empty
,因为"{}"
和"{}\n"
数字为0.正如你所提到的那样,会引发警告。
在处理之前,您可以尝试chomp $content
。
答案 2 :(得分:1)
顶级JSON thingy可以是一个对象({...}
)或一个数组([...]
),但你只是检查其中一个。如果你只是想看看它是否为空,我会检查字符串的长度:
chomp $possible_json;
if( $length $possible_json >= 3 ) { ... }
您也可以考虑Randal Schwartz的regex for JSON parsing。它并不处理所有事情,但对于简单的事情来说它通常就足够了。
答案 3 :(得分:0)
我可能最终会分手:
unless ($content) {print "Error\n"};
$content =~ /{(.*)}/
my $resp = $1;
if ($resp) {
print "Contains Things ($resp)\n";
} else {
print "Empty\n";
}