Come formattare il file JSON in Vim


Risposte:


47

Oppure puoi installare quello jqche è più veloce (scritto in C) dal tuo gestore di pacchetti (ad esempio sudo apt install jqin Ubuntu / Debian, sudo dnf install jqsu Fedora / RHEL / CentOS) o dal sorgente e poi in vim, digita:

:%!jq .

1
:%!jqfunziona altrettanto bene per me.
Micks Ketches,

3
Hm ... funziona solo con l'aggiunta .per me. Mi chiedo perché.
Costa

29

Questo one-liner funziona bene per formattare JSON in Vim in una forma leggibile dall'uomo:

:%!python -m json.tool


1
Lo memorizzi e lo digiti ogni volta o usi qualche tipo di alias?
Asedsami,

Tendo a utilizzare la :%!jq .risposta in questi giorni, poiché faccio meno con Python e tendo ad averlo jqinstallato sui miei sistemi per qualsiasi lavoro JSON in CLI. Ricevo anche notifiche per questa domanda SO abbastanza spesso, quindi mi aiuta a non dimenticare: PI preferisco vim con personalizzazione minima, nessun plug-in, ecc., Un'altra ragione per cui la jqsoluzione è ora la mia preferita.
ljs.dev il

(risposta accettata aggiornata per riflettere questo)
ljs.dev

3
Solo un avvertimento che questo sfuggirà ad alcuni caratteri solo in ASCII. Quindi, se vuoi la codifica UTF8, jq è l'opzione migliore.
AndrewHarvey,

5

Per formattare in modo deterministico, dobbiamo ordinare l'hash. Nessuna delle altre risposte lo ha fatto per me, quindi ho creato il mio:

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

Uso:

:call FormatJson()

Benvenuti in Vi e Vim ! Bella prima risposta; è interessante considerare l'aspetto di smistamento!
D. Ben Knoble

Per quanto riguarda l'ordinamento, sono abbastanza sicuro che jqnelle risposte SebMa sia presente --sort-keysun'opzione che farebbe il lavoro. Ma è bello anche scrivere la tua implementazione :)
statox

1

Se PHP è disponibile, aggiungi lo strumento jfcome JSON Formatter di Composer:

$ composer global require codegear/json-formatter

Quindi formatta il file corrente:

:%!jf %

Oppure aggiungi una keymap in vimrc:

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

1

Io uso questo :Jsonfcomando. Può formattare Unicode.

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)))"'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.