我正在尝试将一个字符串与另一个字符串进行比较。
如果它是一个包含内容的JSON结构,我想打印“contains things”。如果它是一个不包含任何东西的JSON结构,我打印“empty”如果它不是在大括号“{}"之间的东西,我打印有错误。
我是这么做的
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”,并打印“empty”,就像他应该对“eq”做的那样,并抛出:
Argument "{}" isn't numeric in numeric eq (==)".
我可以使用JSON库,但我不喜欢。
4条答案
按热度按时间kpbpu0081#
对我很有效。
$content
有换行符吗?试试chomp $content;
nbysray52#
我不喜欢八年前的答案。现在我只想看看JSON:
如果你在程序之外,有
jq
:一个顶级的JSON可以是一个对象(
{...}
)或一个数组([...]
),但你只检查其中的一个。如果你只是想看看它是否为空,我会检查字符串的长度:你也可以考虑Randal Schwartz的regex for JSON parsing。它不能处理所有的事情,但它通常足以处理简单的事情。
qrjkbowd3#
如果我在
{}
后面添加一个换行符,我可以复制这个行为:它返回“Error”,如果我用
==
替换eq
,它返回empty
,因为"{}"
和"{}\n"
的数值都是0。正如你提到的,一个警告被抛出。在处理
$content
之前,您可能会尝试chomp。cuxqih214#
我可能会把它拆散: