Cómo formatear el archivo JSON en Vim


Respuestas:


47

O puede instalar jqcuál es más rápido (escrito en C) desde su administrador de paquetes (por ejemplo, sudo apt install jqen Ubuntu / Debian, sudo dnf install jqen Fedora / RHEL / CentOS) o desde la fuente y luego en vim, escriba:

:%!jq .

1
:%!jqFunciona igual de bien para mí.
Micks Ketches

3
Hm ... solo funciona con lo agregado .para mí. Me pregunto porque.
Costa

29

Este one-liner funciona bien para formatear JSON en Vim en una forma legible para humanos:

:%!python -m json.tool


1
¿Memorizas eso y lo escribes cada vez o usas algún tipo de alias?
asedsami

Tiendo a usar la :%!jq .respuesta en estos días, ya que hago menos con Python y suelo jqinstalarme en mis sistemas para cualquier trabajo JSON en la CLI. También recibo notificaciones para esta pregunta SO con bastante frecuencia, por lo que me ayuda a no olvidar: PI prefiere vim con una personalización mínima, sin complementos, etc., que es otra razón por la cual jqmi solución ahora es mi preferida.
ljs.dev

(respuesta aceptada actualizada para reflejar esto)
ljs.dev

3
Solo una advertencia de que esto escapará a algunos caracteres solo en ASCII. Entonces, si desea la codificación UTF8, jq es la mejor opción.
AndrewHarvey

5

Para formatear de manera determinista, necesitamos ordenar el hash. Ninguna de las otras respuestas hizo eso por mí, así que creé la mía:

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

¡Bienvenidos a Vi y Vim ! Buena primera respuesta; ¡Es interesante que consideres el aspecto de clasificación!
D. Ben Knoble

Sobre la clasificación, estoy bastante seguro de que lo jqmencionado en las respuestas de SebMa tiene una --sort-keysopción que haría el trabajo. Pero también es genial escribir tu propia implementación :)
statox

1

Si PHP está disponible, agregue la herramienta jfcomo formateador JSON de Composer:

$ composer global require codegear/json-formatter

Luego formatee el archivo actual:

:%!jf %

O agregue un mapa de teclas en vimrc:

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

1

Yo uso este :Jsonfcomando. Puede formatear 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)))"'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.