パッケージをインストールせずにシェルスクリプト内のJSONファイルの構文を検証するにはどうすればよいですか?パッケージをインストールせずにシェルスクリプトでJSONファイル構文を検証する
2
A
答えて
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
関連する問題
- 1. VIMでPHP構文を検証する
- 2. ページのフォームを検証せずにユーザーコントロールフォームを検証する
- 3. Emacsはパッケージを表示せず、パッケージをインストールさせません。
- 4. パッケージを再構築せずにNAMESPACEファイルを編集できますか?
- 5. ソースからコンパイルせずにcygwinにパッケージをインストールする
- 6. 角度cliで再構築せずに.jsonファイルを更新するには?
- 7. opensslを使ってpythonでファイルを作成せずに検証するには?
- 8. npmパッケージweexpackのインストール時にチェックサム検証に失敗する
- 9. プライベートユニバースにパッケージをアップロードするには(再構築せずに)?
- 10. シェルスクリプトのurls検証
- 11. JSON文書がJSONスキーマで検証に失敗する
- 12. setup.pyを使用せずにgithubパッケージをインストールしますか?
- 13. index.htmlファイルでキーワードを検索するシェルスクリプト
- 14. 「サブモデル」を検証せずにMVC-3モデルを検証できますか?
- 15. JSON形式を破棄せずにJSONファイルを更新する
- 16. CodeMirror動的構文検証
- 17. ラーバル検証構文エラー
- 18. htmlテーブル構文の検証
- 19. xmllint DTD検証構文
- 20. node.jsを使用してXML構文/構造を検証する
- 21. javascriptでコード化されたファイルの構文を検証する方法は?
- 22. Springを使用してオブジェクトのJSON構造を検証する
- 23. IF構文の構文の問題:シェルスクリプト
- 24. 内部クラスを公開せずにパッケージでライブラリを構成する方法
- 25. ユーザー検証ロジックを複製せずにユーザーアクセスを防止する
- 26. バインディングターゲットを更新せずに値を検証する方法は?
- 27. C#でJSON文字列を解析して検証する
- 28. パッケージをインストールせずにPostSharpを使用する方法はありますか
- 29. JSONをPythonで構文解析する(逆辞書検索)
- 30. C#でのみXML構文を検証する
には/ dev/nullに
にJSONツールの出力をリダイレクトすることができますことを達成するには、 'jq'を試してみましたか? – codeforester
@codeforesterそれは間違いなく "パッケージ"です...しかし、質問は基本的にJSONパーサをシェルスクリプトに書く方法を尋ねています。これは非常に幅広いです。 –
私はこれをjavaで書いており、それは完全にうまく動作しています:) –