我希望在git推送之前确保我的JSON文件格式正确。我用emacs;有没有一种模式可以帮助检测语法错误?否则,是否有一些解析器/验证器可以设置为在更改的.json
文件上运行?
语法错误示例:对象的最后一个值后面的逗号。
谢谢!
编辑:出于安全原因,我不会将JSON复制并粘贴到第三方JSON验证网站。
答案 0 :(得分:2)
尝试flymake-json - 基于JSONLint,您可能会发现也很有用json-reformat。
答案 1 :(得分:1)
Flymake现在似乎已经过时了。你可以尝试flycheck + jsonlint。 我做了什么让它在json模式下运行(emacs 25.1.50,ubuntu 14.04):
sudo npm install jsonlint -g
json-jsonlist
emacs变量列表中删除flycheck-disabled-checkers
值。 (require 'flycheck)
(flycheck-add-mode 'json-jsonlint 'json-mode)
(add-hook 'json-mode-hook 'flycheck-mode)
这对我有用:json中的错误被高亮显示并导航
M-g M-n
个键。当然,在巨大的flycheck documentation中可能会有更好/更简单的替代方法。
答案 2 :(得分:0)
这是我最终使用的解决方案。
只需将以下代码粘贴到目录的.git/hooks/pre-commit
文件中即可。然后,chmod +x
文件。
#!/bin/sh
files=$(git diff --cached --name-only --diff-filter=ACM | grep ".json$")
if [ "$files" = "" ]; then
exit 0
fi
pass=true
echo "\nValidating Modified JSON Files:\n"
for file in ${files}; do
result=$(jslint ${file} | grep "${file} is OK")
if [ "$result" != "" ]; then
echo "\t\033[32mJSLint Passed: ${file}\033[0m"
else
echo "\t\033[31mJSLint Failed: ${file}\033[0m"
pass=false
fi
done
echo "\nJSON Validation Complete\n"
if ! $pass; then
echo "\033[41mCOMMIT FAILED:\033[0m Your commit contains JSON files do not pass . Please fix the JSLint errors and try again.\n"
exit 1
else
echo "\033[42mCOMMIT SUCCEEDED\033[0m\n"
fi
答案 3 :(得分:0)
Go 的 JSON 解析器还有一个纯 elisp 端口,它会突出显示第一个语法错误:https://github.com/psanford/json-error-mode