我有一个CLI应用程序,用户提供JSON。我需要检查JSON是否有效。我发现以下内容可能非常有用:
function isJsonValid(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
但是当我调试我的应用程序时,我注意到一个小问题,即命令中所有的引号"
和单引号'
以及空格都被剥离了。
因此json如下:
{
"key1": "value1",
"key2": "value2"
}
被更改为以下内容:
{key1:value1,key2:value2}
我需要一个正则表达式来检查这个已剥离的JSON是否有效。因此,结果应该看起来像这样:
re.test({key1:value1,key2:value2}) // true
re.test({key1:value1}) // true
re.test({key1:value1,}) // false, extra comma
re.test({key1:value1, key2}) // false, missing value of key2
re.test({key1:value1, key2:value2) // false, missing closing }
re.test({key1:value1, key2:value2}}) // false, extra closing }
有人可以帮我处理正则表达式部分吗?很不幸,这真的不是我的强项。
key:value
对的简单情况,还是必须允许嵌套对象和/或数组? - nnnnnn{
- 开始括号,key
+:
+value
+ 结束括号}
。而key:value
部分可以重复多次,并且应该用逗号分隔。 - Andurittrue
,则传递的 JSON 是有效的,如果它返回false
,则发生了错误,JSON 无效。为什么要重新检查呢? - TeemuJSON
有的小问题上,而不是评估那个剥离版本,那里肯定出了问题。你能告诉我们str
变量是如何传递给isJsonValid
函数的吗?-- @Teemu,该函数总是返回false,因为str
不是JSON
。 - gmo