2017-02-22 10 views
2

パッケージをインストールせずにシェルスクリプト内のJSONファイルの構文を検証するにはどうすればよいですか?パッケージをインストールせずにシェルスクリプトでJSONファイル構文を検証する

+1

には/ dev/nullに

echo "${line}" | python -m json.tool 

にJSONツールの出力をリダイレクトすることができますことを達成するには、 'jq'を試してみましたか? – codeforester

+0

@codeforesterそれは間違いなく "パッケージ"です...しかし、質問は基本的にJSONパーサをシェルスクリプトに書く方法を尋ねています。これは非常に幅広いです。 –

+0

私はこれをjavaで書いており、それは完全にうまく動作しています:) –

答えて

0

通常はpythonがシステムにインストールされているため、JSONの解析に使用できます。

cat YOURFILENAME | python -c "import sys,json;json.loads(sys.stdin.read());print 'OK'" 

スキーマが有効な場合、「OK」と表示されます。

例:

$ echo {} | python -c "import sys,json;json.loads(sys.stdin.read());print 'OK'" 
OK 
$ echo [] | python -c "import sys,json;json.loads(sys.stdin.read());print 'OK'" 
OK 
$ echo 5 | python -c "import sys,json;json.loads(sys.stdin.read());print 'OK'" 
OK 
$echo a | python -c "import sys,json;json.loads(sys.stdin.read());print 'OK'" 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "/usr/lib/python2.7/json/__init__.py", line 338, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib/python2.7/json/decoder.py", line 366, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 
2

python -mjson.toolが動作しないシステムがまだ見つかりませんでした。

python -mjson.tool "$somefile" > /dev/null 

終了コードがゼロ以外になり、ファイルが有効なJSONでない場合は、stderrにパースエラーが出ます:だからあなたが行うことができます。

0

1つのファイルに複数のjson文字列が連結されていて、同じタイプの複数のファイルが同じフォルダにあります。ベローコードは、検証するファイルのリストを作成し、各ファイルを1行ずつ読み込み、各行の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、ちょうどeroneousものを見たいと思っていません。あなたは

echo "${line}" | python -m json.tool > /dev/null 
関連する問題