Edición de esquema, como el modo org, para JSON


15

Estoy tratando de editar un archivo Swagger JSON en emacs. Contiene grandes objetos JSON anidados, por lo que quiero colapsar y ocultar algunos de ellos.

Lo he intentado origami-mode, configurado como origami-c-style-parseren origami-parser-alist, pero es bastante poco sofisticado (la palabra "analizador" parece ser una palabra demasiado grandiosa para lo que hace). No se da cuenta de que las subcadenas de parámetros de Swagger URL como {id}están dentro de las cadenas JSON, por lo que felizmente las colapsa también cuando le pido que contraiga todos los nodos en el búfer excepto el nodo actual. No quiero que haga eso. Quiero una forma de colapso sólo subárboles JSON como objetos, no subcadenas de cadenas JSON que sucedan tener llaves en ellos. ¿Cómo puedo lograr este objetivo?


No lo sé con certeza, pero es bastante posible que js2-modetenga plegado que también pueda plegar archivos JSON.
wvxvw


Un enfoque es convertir su json en un formato de árbol similar y operar con eso. Esto se puede convertir en xml github.com/hay/xml2json . Yaml sería otro enfoque.
Att Righ

Respuestas:


1

Emacs viene con el modo hs-minor-mode que se puede usar selectivamente para mostrar / ocultar código y comentar bloques en varios idiomas, incluido JavaScript. De manera predeterminada, esto le permitirá ocultar y mostrar bloques JSON delimitados por '{' y '}', pero también se puede modificar fácilmente para permitir '[' y ']' como delimitadores de bloque. Para hacer esto, necesitamos modificar la js-modeentrada hs-special-modes-alistcon algo como:

(setcdr (assoc 'js-mode hs-special-modes-alist)' ("[{[]" "[} \\]]" "/ [* /]" nil))

Debería encontrar que los [...] bloques pueden ocultarse y mostrarse, así como {...} bloques.


0

Myjson-mode tiene una función de plegado de código que no debería intentar doblar cosas que se parecen a objetos o matrices dentro de las cadenas. No es un modo mayor maduro, pero debería ser utilizable.

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.