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

Emacs mode or validation tool to help detect errors in JSON files?

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

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

谢谢!

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

尝试flymake-json - based on JSONLint, you may find also useful json-reformat

这是我最终使用的解决方案。

只需将以下代码粘贴到您目录的 .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 "\t3[32mJSLint Passed: ${file}3[0m"
    else
        echo "\t3[31mJSLint Failed: ${file}3[0m"
        pass=false
    fi
done

echo "\nJSON Validation Complete\n"

if ! $pass; then
    echo "3[41mCOMMIT FAILED:3[0m Your commit contains JSON files do not pass . Please fix the JSLint errors and try again.\n"
    exit 1
else
    echo "3[42mCOMMIT SUCCEEDED3[0m\n"
fi

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

  1. 安装 jsonlint:sudo npm install jsonlint -g
  2. flycheck-disabled-checkers emacs 变量列表中删除 json-jsonlist 值。
  3. 向 emacs 配置添加类似的内容:

(require 'flycheck) (flycheck-add-mode 'json-jsonlint 'json-mode) (add-hook 'json-mode-hook 'flycheck-mode)

这对我有用:json 中的错误突出显示并由 M-g M-n 键。当然,在巨大的 flycheck documentation.

中可以描述其他 better/simpler 方式

Go 的 JSON 解析器还有一个纯 elisp 端口,它将突出显示第一个语法错误:https://github.com/psanford/json-error-mode