So formatieren Sie JSON-Dateien in Vim


Antworten:


45

Oder Sie können installieren, jqwas schneller (in C geschrieben) ist, von Ihrem Paketmanager (z. B. sudo apt install jqin Ubuntu / Debian, sudo dnf install jqunter Fedora / RHEL / CentOS) oder von der Quelle und dann in vim, geben Sie Folgendes ein:

:%!jq .

1
:%!jqfunktioniert genauso gut für mich.
Micks Ketches

1
Hm ... funktioniert nur mit dem .für mich hinzugefügten . Ich wundere mich warum.
Costa

27

Dieser Einzeiler funktioniert gut, um JSON in Vim in eine für Menschen lesbare Form zu formatieren:

:%!python -m json.tool


1
Merken Sie sich das und geben Sie es jedes Mal ein oder verwenden Sie einen Alias?
Asedsami

Ich verwende :%!jq .heutzutage eher die Antwort, da ich weniger mit Python mache und jqauf meinen Systemen für jede JSON-Arbeit in CLI installiert habe. Ich bekomme auch ziemlich oft Benachrichtigungen für diese SO-Frage, daher hilft es mir nicht zu vergessen: PI bevorzugt vim mit minimalen Anpassungen, ohne Plugins usw., was ein weiterer Grund ist, warum die jqLösung jetzt meine bevorzugte ist.
ljs.dev

(aktualisierte akzeptierte Antwort, um dies widerzuspiegeln)
ljs.dev

3
Nur eine Warnung, dass dadurch nur einige Zeichen in ASCII entkommen. Wenn Sie also eine UTF8-Codierung wünschen, ist jq die bessere Option.
Andrew Harvey

4

Um deterministisch zu formatieren, müssen wir den Hash sortieren. Keine der anderen Antworten hat das für mich getan, also habe ich meine eigene erstellt:

function! FormatJson()
python << EOF
import vim
import json
try:
    buf = vim.current.buffer
    json_content = '\n'.join(buf[:])
    content = json.loads(json_content)
    sorted_content = json.dumps(content, indent=4, sort_keys=True)
    buf[:] = sorted_content.split('\n')
except Exception, e:
    print e
EOF
endfunction

Verwendungszweck:

:call FormatJson()

Willkommen bei Vi und Vim ! Schöne erste Antwort; Es ist interessant, dass Sie den Sortieraspekt berücksichtigen!
D. Ben Knoble

Über die Sortierung, von der ich ziemlich sicher bin, dass jqsie in SebMa-Antworten erwähnt wird, gibt es eine --sort-keysOption, die den Job erledigen würde. Aber es ist cool, auch eine eigene Implementierung zu schreiben :)
statox

1

Wenn PHP verfügbar ist, fügen Sie das Tool jfals JSON-Formatierer von Composer hinzu:

$ composer global require codegear/json-formatter

Dann aktuelle Datei formatieren:

:%!jf %

Oder fügen Sie eine Keymap in vimrc hinzu:

nnoremap <Leader>jf :%!jf %<CR>

1

Ich benutze diesen :JsonfBefehl. Es kann Unicode formatieren.

command! Jsonf :execute '%!python -c "import json,sys,collections,re; sys.stdout.write(re.sub(r\"\\\u[0-9a-f]{4}\", lambda m:m.group().decode(\"unicode_escape\").encode(\"utf-8\"),json.dumps(json.load(sys.stdin, object_pairs_hook=collections.OrderedDict), indent=2)))"'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.