如何在不安装任何软件包的情况下在shell脚本中验证JSON文件的语法?
答案 0 :(得分:11)
我还没有找到python -mjson.tool "$somefile" > /dev/null
无效的系统。所以你可以这样做:
$("form").keypress(function (e) {
debugger;
if(e.charCode == 13){
e.stopImmediatePropagation();
e.preventDefault();
}
});
退出代码将非零,如果文件无效JSON,则会在stderr上获得解析错误。
答案 1 :(得分:3)
通常会在系统上安装observers
,因此您可以使用它来解析JSON。
python
如果架构有效,我会打印“OK”。
示例:
1
cat YOURFILENAME | python -c "import sys,json;json.loads(sys.stdin.read());print 'OK'"
2
$ echo {} | python -c "import sys,json;json.loads(sys.stdin.read());print 'OK'"
OK
3
$ echo [] | python -c "import sys,json;json.loads(sys.stdin.read());print 'OK'"
OK
4
$ echo 5 | python -c "import sys,json;json.loads(sys.stdin.read());print 'OK'"
OK
答案 2 :(得分:3)
我在一个文件中连接了多个json字符串,并且在同一个文件夹中有多个此类型的文件。 Bellow代码将组成要验证的文件列表,逐行读取每个文件并验证每行中的json字符串。如果找到无效行,则断开循环并通知用户哪个文件具有无效的json,行号,行内容验证失败。当json字段包含HTML转义内容时,此代码特别有用,我们必须确保它不会破坏json完整性。
for filename in *txt; do
lncnt=0
echo $filename
while read -r line; do
lncnt=$((lncnt+1))
echo "${line}" | python -m json.tool
RET=$?
if [ $RET -gt 0 ] ; then
echo "Error in $filename:$lncnt ${line}"
break
fi
done < $filename
done
示例文件内容:
cat file1.txt
{"key11":"Value1","key12":"value2"}
{"key21":"Value1","key22":"value2"}
{"key31":"Value1","key32":"value2"}
{"key41":"Value1","key42":"value2"}
{"key41":"INVALID_CLOSED,"key42":"value2"}
{"key51":"Value1","key52":"value2"}
预期结果:
file1.txt
{
"key11": "Value1",
"key12": "value2"
}
{
"key21": "Value1",
"key22": "value2"
}
{
"key31": "Value1",
"key32": "value2"
}
{
"key41": "Value1",
"key42": "value2"
}
Expecting , delimiter: line 1 column 26 (char 26)
Error in file1.txt:5 {"key41":"INVALID_CLOSED,"key42":"value2"}
最终,在验证期间,您不希望看到有效的jsons打印,只是错误的jsons。为此,您可以将json工具输出重定向到/ dev / null
echo "${line}" | python -m json.tool
到
echo "${line}" | python -m json.tool > /dev/null
答案 3 :(得分:0)
在Powershell Core(跨平台)中,有一个内置方法,可让您执行验证test-json
。 PowerShell语法:Test-Json [-Json] <String> [[-Schema] <String>]
。有关更多信息,请点击此处:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/test-json
答案 4 :(得分:0)
也许以某种方式(卷曲?)将 json 推送到 https://search.google.com/test/rich-results 在此处查看 API 选项:https://developers.google.com/webmaster-tools
或者:
需要 jq(并行是可选的,可以使用 xargs):
[pjalajas@sup-pjalajas-2 504Project]$ find test_0009 -iname "*.jsonld" | parallel "jq '.' 2> /dev/null ; echo $?" | cut -d\ -f1 | sort | uniq -c | sort -k1nr
1660 0