Est-ce que quelqu'un connaît un bon mode Emacs pour éditer le JSON? Une application sur laquelle je travaille utilise un protocole de communication basé sur JSON et le fait que les données soient bien mises en retrait et mises en évidence par la syntaxe me serait très utile dans le processus de résolution.
Avez-vous essayé le mode js2 de Steve Yegge pour Emacs ?
+1 pour Josh's json-mode - fonctionne bien pour moi. J'ai ajouté
(defun beautify-json ()
(interactive)
(let ((b (if mark-active (min (point) (mark)) (point-min)))
(e (if mark-active (max (point) (mark)) (point-max))))
(Shell-command-on-region b e
"python -mjson.tool" (current-buffer) t)))
et
(define-key json-mode-map (kbd "C-c C-f") 'beautify-json)
sur json-mode.el pour faciliter l’appel de commandes Shell.
UPDATE: Pour ceux d'entre vous qui ont un besoin/désir de le faire avec Unicode, voir ma question ici . Le résultat est plutôt que d'utiliser:
python -mjson.tool
vous voudrez utiliser
python -c 'import sys,json; data=json.loads(sys.stdin.read()); print json.dumps(data,sort_keys=True,indent=4).decode(\"unicode_escape\").encode(\"utf8\",\"replace\")'
cela permet à la fois d’embellir le JSON et de préserver le contenu Unicode d’origine.
js-mode prend en charge la coloration syntaxique et l'indentation des fichiers json.
C'est à partir de Emacs 23.2, lorsque le mode expresso a été incorporé à Emacs et renommé js-mode.
Vérifiez-le: http://www.nongnu.org/espresso/
Si vous voulez quelque chose de léger, essayez ce mode majeur que j'ai piraté: https://github.com/joshwnj/json-mode
Ce n'est en réalité rien de plus qu'une mise en surbrillance syntaxique supplémentaire en plus du mode javascript, mais pour les besoins de mon travail, je trouve que cela fonctionne assez bien.
Un autre cas d'utilisation courant est le formatage automatique d'un fichier JSON (par exemple, s'il est compressé avec des espaces et que vous souhaitez plus de lisibilité). Pour ce faire, je passe simplement dans le tampon à l'aide d'un script de ligne de commande: C-u M- |
J'ai préparé une solution de contournement pour js2-mode afin qu'il analyse les fichiers json sans erreurs . Vous pouvez le trouver dans mon commentaire: http://code.google.com/p/js2-mode/issues/detail? id = 50 # c7
(Je voulais le poster en tant que commentaire, solution J.F. Sebastian, mais il semble que je ne suis pas autorisé à le faire (pas de lien 'ajouter un commentaire'))
json.el
par Edward O'Connor fait partie de GNU Emacs depuis le 23.1 (2008).
Bien que ce ne soit pas un surligneur de syntaxe, il a une fonction utile pour formater le JSON:
M-x json-pretty-print-buffer RET
Donc, si vous avez une version récente d’Emacs, il n’est pas nécessaire d'utiliser jq
ou python -m json.tool
.
Puisque JSON est un sous-ensemble de YAML, yaml-mode
fonctionne également (je ne sais pas comment il se compare à js-mode
et json-mode
, cependant).
Installer (à partir d'emacs): M-x package-install yaml-mode
.
Association de yaml-mode
avec les fichiers YAML et JSON, dans ~/.emacs.d/init.el
:
(add-to-list 'auto-mode-alist '("\\.yaml$" . yaml-mode))
(add-to-list 'auto-mode-alist '("\\.json$" . yaml-mode))
Je seconderai également le mode json de Josh, mais je recommanderai également flymake-json en complément. Cela aide à mettre en évidence les erreurs de syntaxe.
Je n'aime pas utiliser python -mjson.tool
car il réorganise des éléments dans des objets JSON . Je trouve que (prog-indent-sexp)
fonctionne très bien pour se réindiquer et que jsonlint
Au lieu de python -mjson.tool
fonctionne pour jolie impression/reformatage dans beautify-json
(eval-after-load "json-mode"
'(progn
(require 'flymake-json)
;; flymake-cursor displays error in minibuffer message area instead of requiring hover
(require 'flymake-cursor)
(add-hook 'json-mode-hook 'flymake-json-load)
(define-key json-mode-map "\C-c\C-n" (function flymake-goto-next-error))
)
)
JSON est pris en charge par espresso-mode
J'ai développé la solution de contournement de Mariusz Nowak , pour la rendre utilisable en tant que mode majeur à part entière. Peu de modifications étaient nécessaires au-delà de la simple dérivation du mode; le seul changement dont le travail de Nowak avait réellement besoin était la capacité de reconnaître les mémoires tampons non associées à des fichiers, ou associées à des fichiers dont le nom ne se termine pas par .json
, en tant que JSON, ce que nous réalisons avec une variable tampon locale.
Voici la solution de contournement augmentée:
(make-variable-buffer-local 'js2-parse-as-json)
(defadvice js2-reparse (before json)
(setq js2-buffer-file-name buffer-file-name))
(ad-activate 'js2-reparse)
(defadvice js2-parse-statement (around json)
(if (and (= tt js2-LC)
js2-buffer-file-name
(or js2-parse-as-json
(string-equal (substring js2-buffer-file-name -5) ".json"))
(eq (+ (save-excursion
(goto-char (point-min))
(back-to-indentation)
(while (eolp)
(next-line)
(back-to-indentation))
(point)) 1) js2-ts-cursor))
(setq ad-return-value (js2-parse-assign-expr))
ad-do-it))
(ad-activate 'js2-parse-statement)
(define-derived-mode json-mode js2-mode "JSON"
"Major mode for editing JSON data."
:group 'json
(setq js2-parse-as-json t)
(js2-reparse t))
(add-to-list 'auto-mode-alist '("\\.json$" . json-mode))
Si vous utilisez déjà js2-mode, cette option est peut-être meilleure que js-mode
plus flymake-json
car vous n'avez pas besoin d'installer quoi que ce soit de nouveau (le mode js2 vérifie déjà la syntaxe, aucun outil externe n'est nécessaire) et ce mode héritera de votre js2. -mode configuration, ce que js-mode ne fera pas.
js3-mode: https://github.com/thomblake/js3-mode
le mode js3 est un mode js2 amélioré
Ce paquet peut être installé par la commande package-list-packages