验证来自 JSON 的数据具有 Boolean(true,false) 而不是 ("true","false")。而字符串(“12345”)不是(12345)

Validate data from JSON having Boolean(true,false) not ("true","false"). And string ("12345") not (12345)

需要验证数据表单 JSON 文件。 示例 JSON: 预计

{
   id => "12345",
   flag=> true
}

如果文件有如下数据,我需要抛出错误

{
   id => 12345,
   flag=> "true"
}

我发现这个 link 用于验证字符串 here

但如果有任何其他解决方案,这将对我有所帮助。 TIA

$val 是一个字符串吗?

链接的答案不会帮助您区分 "12345"12345。要检查一个值是否存储为字符串,您可以使用

use B qw( svref_2object SVf_POK );

svref_2object($val)->FLAGS & SVf_POK
   or die("Not a string\n");

这应该适用于您的 JSON 解析器的值,但如果您期望双变量、具有重载的对象或神奇的标量,它就不会工作。


$val 是布尔值吗?

最流行的 JSON 解析器使用特殊对象来表示 JSON 中的 truefalse

有了Cpanel::JSON::XS,就可以用

Cpanel::JSON::XS::is_bool($val)
   or die("Not a boolean\n");

JSON::XS 和 JSON::PP 也提供了一些检查方法。