使用Javascript检查内容是否为json类型时出现问题

使用Javascript检查内容是否为json类型时出现问题,javascript,json,Javascript,Json,我正在检查输入值是json类型还是不使用JavaScript,但对于某些特定值,它会失败。我在下面解释我的代码 isJSON=async(str)=>{ 试一试{ 返回(JSON.parse(str)和&!!str); }捕获(e){ 返回false; } } var testJSON='{“name”:“foo”}' 变量数=22 log(“结果是:”,isJSON(testJSON)) console.log(“result is:”,isJSON(number))字符串22是有效的jso

我正在检查输入值是json类型还是不使用JavaScript,但对于某些特定值,它会失败。我在下面解释我的代码

isJSON=async(str)=>{
试一试{
返回(JSON.parse(str)和&!!str);
}捕获(e){
返回false;
}
}
var testJSON='{“name”:“foo”}'
变量数=22
log(“结果是:”,isJSON(testJSON))

console.log(“result is:”,isJSON(number))
字符串
22
是有效的json(json是一个元素,元素是一个ws值,值可以是一个数字)。

json.parse
将值强制转换为字符串

因此,您需要做的另一项检查是测试该值是否为字符串

if (typeof str !== "string") return false;
字符串
“22”
是有效的JSON文本


如果要检查该值是否不仅是JSON,而且是非数组对象的JSON表示形式。然后,您需要明确地进行测试

isObjectAsJSON=(str)=>{
if(typeof str!=“string”)返回false;
试一试{
const parsed=JSON.parse(str);
if(typeof parsed!=“object”)返回false;
if(Array.isArray(parsed))返回false;
返回true;
}捕获(e){
返回false;
}
};
常量值={
电话:22,
json_编号:json.stringify(22),
json_数组:json.stringify([“foo”,“bar]”),
json_对象:json.stringify({
傅:“酒吧”
}),
};
Object.entries(value).forEach([key,value])=>{
log(键,isObjectAsJSON(值))

});为什么异步。。。。这回答了你的问题吗?请更新您的问题,使其内部一致,因为“22”是有效的JSON。这意味着修复标题,可能“但是如果输入值是任何数字,即e-str=22,那么它也会返回true”。也许给我们一些输入和匹配输出的示例,这样我们就不必猜测您想要什么。不确定我的答案为什么被否决。Op似乎试图做一些不同于验证输入的事情。也许op期望的对象不是所要求的对象。然后,答案是检查结果,看看它是否是
typeof
的预期类型,并用array.isArray().typeof JSON.parse('22')=='number'@AllanWind-Yes告诉对象或数组。JSON文本
22
是数字的JSON表示形式。如果你把它解析为JSON,你会得到一个数字。你说“字符串”22“是一个有效的JSON文本。”但我想说的是,用数字或者输入来代替文本。@AllanWind-我完全不知道这个建议和这个问题的答案有什么关系。@Quentin,你的答案很好,但输入<代码>失败。{“操作”:“GET”、“uri”:“/asds/sadas”、“headers”:[{“key”:“Accept”、“value”:“application/json”}]}'