在shell脚本中验证JSON文件语法,而无需安装任何软件包

时间:2017-02-22 07:20:06

标签: json shell

如何在不安装任何软件包的情况下在shell脚本中验证JSON文件的语法?

5 个答案:

答案 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