Emacs模式或验证工具,以帮助检测JSON文件中的错误?

时间:2015-04-01 23:48:27

标签: json git parsing emacs

我希望在git推送之前确保我的JSON文件格式正确。我用emacs;有没有一种模式可以帮助检测语法错误?否则,是否有一些解析器/验证器可以设置为在更改的.json文件上运行?

语法错误示例:对象的最后一个值后面的逗号。

谢谢!

编辑:出于安全原因,我不会将JSON复制并粘贴到第三方JSON验证网站。

4 个答案:

答案 0 :(得分:2)

尝试flymake-json - 基于JSONLint,您可能会发现也很有用json-reformat

答案 1 :(得分:1)

Flymake现在似乎已经过时了。你可以尝试flycheck + jsonlint。 我做了什么让它在json模式下运行(emacs 25.1.50,ubuntu 14.04):

  1. 安装jsonlint:sudo npm install jsonlint -g
  2. json-jsonlist emacs变量列表中删除flycheck-disabled-checkers值。
  3. 添加到emacs配置类似的内容:
  4. (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