it-swarm.com.de

Emacs-Modus zum Bearbeiten von JSON

Kennt jemand einen guten Emacs-Modus zum Bearbeiten von JSON? Eine App, an der ich arbeite, verwendet ein JSON-basiertes Kommunikationsprotokoll. Wenn die Daten gut eingerückt und die Syntax hervorgehoben werden, würde dies mir sehr helfen, dies herauszufinden.

74
Ryszard Szopa

Haben Sie Steve Yegges js2-mode für Emacs ausprobiert?

16
jfs

+1 für Josh's Json-Modus - funktioniert gut für mich. Ich fügte hinzu

(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)))

und

(define-key json-mode-map (kbd "C-c C-f") 'beautify-json)

auf json-mode.el, um den Aufruf des Shell-Befehls zu erleichtern.

UPDATE: Für diejenigen von Ihnen, die dies mit Unicode tun möchten/wollen, finden Sie unter meiner Frage hier Das Ergebnis ist eher als zu verwenden:

python -mjson.tool

sie möchten verwenden

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\")'

dies verschönert sowohl den JSON als auch den ursprünglichen Unicode-Inhalt.

31
jstevenco

js-mode unterstützt Syntaxhervorhebung und -einzug für Json-Dateien.

Dies ist der Stand von Emacs 23.2, als der Espresso-Modus in Emacs integriert und in Js-Modus umbenannt wurde.

Schau es dir an: http://www.nongnu.org/espresso/

28
Steve

Wenn Sie etwas Leichtes wollen, probieren Sie diesen Major-Modus aus, den ich zusammen gehackt habe: https://github.com/joshwnj/json-mode

Es ist eigentlich nicht mehr als ein paar zusätzliche Syntax-Hervorhebungen zusätzlich zum Javascript-Modus, aber für meine Zwecke habe ich festgestellt, dass es ziemlich gut funktioniert.

Ein weiterer häufiger Anwendungsfall ist die automatische Formatierung einer JSON-Datei (z. B. wenn sie whitespace-komprimiert ist und Sie mehr Lesbarkeit wünschen). Dazu leite ich den Puffer nur durch ein Befehlszeilenskript: C-u M- |

15
Josh

Ich habe eine Problemumgehung für js2-mode vorbereitet, damit Json-Dateien fehlerfrei analysiert werden können. Sie finden sie in meinem Kommentar: http://code.google.com/p/js2-mode/issues/detail? id = 50 # c7

(Ich wollte es als Kommentar veröffentlichen, J.F. Sebastian-Lösung, aber es scheint, dass ich dies nicht tun darf (kein Link "Kommentar hinzufügen").)

9
Mariusz Nowak

json.el von Edward O'Connor ist seit 23.1 (2008) Teil von GNU Emacs.

Obwohl es kein Syntax-Highlighter ist, hat es eine nützliche Funktion zum Formatieren von JSON:

M-x json-pretty-print-buffer RET

Wenn Sie eine aktuelle Version von Emacs haben, ist jq oder python -m json.tool nicht erforderlich.

3
gavenkoa

Da JSON eine Untermenge von YAML ist, funktioniert auch yaml-mode (ich kann jedoch nicht mit js-mode und json-mode vergleichen).

Installieren Sie (von emacs): M-x package-install yaml-mode.

Verknüpfung von yaml-mode mit YAML- und JSON-Dateien in ~/.emacs.d/init.el:

(add-to-list 'auto-mode-alist '("\\.yaml$" . yaml-mode))
(add-to-list 'auto-mode-alist '("\\.json$" . yaml-mode))
3
Eric O Lebigot

Ich werde auch den Json-Modus von Josh übernehmen, aber auch Flymake-Json als Zusatz empfehlen. Es hilft, Syntaxfehler hervorzuheben.

Ich mag python -mjson.tool nicht, weil es Elemente in JSON-Objekten neu ordnet .. _. Ich finde, dass (prog-indent-sexp) gut funktioniert, um erneut zu zeigen, und dass jsonlint Anstelle von python -mjson.tool funktioniert hübsches Drucken/Umformatieren in 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))
  )
)
0
djb

JSON wird unterstützt von espresso-mode

0
逸飞.

Ich habe Mariusz Nowaks Workaround erweitert, um es als eigenständigen Modus zu verwenden. Neben der einfachen Ableitung des Modus war wenig Modifikation erforderlich. Die einzige Änderung, die Nowaks Arbeit tatsächlich erforderte, war die Fähigkeit, Puffer, die nicht mit Dateien verknüpft sind, oder mit Dateien, deren Namen nicht auf .json enden, als JSON zu erkennen, was wir mit einer lokalen Puffervariablen erreichen.

Hier ist die erweiterte Problemumgehung:

(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))

Wenn Sie js2-mode bereits verwenden, ist dies möglicherweise eine bessere Option als js-mode plus flymake-json, da Sie nichts Neues installieren müssen (js2-mode prüft bereits die Syntax, kein externes Werkzeug erforderlich) und weil dieser Modus Ihre js2 erbt -Modus-Konfiguration, der js-Modus nicht.

0
Aaron Miller

js3-mode: https://github.com/thomblake/js3-mode

der js3-Modus ist ein verbesserter js2-Modus

Dieses Paket kann mit dem Befehl package-list-packages installiert werden

0
Gang Chen