Complemento PHPStorm para colapsar JSON

Estoy usando PhpStorm y tengo varios archivos JSON que están completamente formateados con sangrías y líneas nuevas.

¿Hay algún complemento que pueda obtener para PhpStorm que me permita colapsar/minificar todo el JSON en estos archivos?

Respuestas (1)

Primer pensamiento: ¿No puede PHP hacer eso por sí mismo? Solo citando de mi memoria:

$json_file = '/path/to/file.json';  /* dynamically set the name of your JSON file here */
file_put_contents($json_file,       /* Write back to disk */
  json_encode(                      /* Re-Encode to JSON */
    json_decode(                    /* Decode original JSON object */
      file_get_contents($json_file) /* Read the original JSON file from disk */
    )
  )
);

No hay protección todavía, pero por supuesto puede dividir eso para escribir solo el archivo si no se han producido errores. Al leer el código anterior de abajo hacia arriba, usted

  1. leer el archivo original (incluidas las sangrías, etc.) del disco
  2. decodifíquelo para convertirlo en un objeto PHP (las sangrías, etc. se pierden aquí)
  3. codificarlo de nuevo a JSON (sin intentos, ya que se perdieron en el paso anterior; esto dará como resultado una cadena de una línea)
  4. Vuelva a escribir el JSON recién creado (de una sola línea) en el disco.

Ponga todo en un bucle para procesar todos sus archivos JSON:

foreach ( glob('/path/to/dir/*.json') as $json_file ) {
  file_put_contents($json_file,json_encode(json_decode(file_get_contents($json_file))));
}

¿Realmente necesitamos un complemento para lo que se puede hacer con una sola línea? ;)

EDITAR: Como señaló ComFreekjson_decode() en su comentario, solo trata con UTF-8. Entonces, si sus archivos usan un conjunto de caracteres diferente, es posible que desee agregar una llamada a utf8_encode()para ajustarse file_get_contents(), de modo que el "comando más interno" del ciclo anterior lea utf8_encode(file_get_contents($json_file)). por completitud:

foreach ( glob('/path/to/dir/*.json') as $json_file ) {
  file_put_contents($json_file,json_encode(json_decode(utf8_encode(file_get_contents($json_file)))));
}
Tendría cuidado con los juegos de caracteres y las codificaciones. json_decode()solo trata con UTF-8 ( fuente ). Si los archivos ya están codificados en ASCII o UTF-8, el código funcionará perfectamente.
@ComFreek gracias por señalar esto! No estaba al tanto de esto, ya que generalmente trato con UTF8 solo cuando se trata de JSON. Actualicé mi respuesta en consecuencia, dándote crédito, por supuesto :)
Siento molestarte de nuevo, pero utf8_encode()no hace lo que probablemente crees que hace (culpe a PHP). Requiere que la cadena de entrada esté en ISO-8859-1 . Uno debe usar iconv()para convertir entre codificaciones de caracteres.
Sí, todos esos detalles desagradables :) Bueno, aquí estamos en SoftwareRecs. Ni siquiera recomendé el software, que estaba un poco en el límite. Pero no deberíamos profundizar en la programación aquí. Gracias nuevamente por señalar a un culpable, @ComFreek, pero supongo que si el OP quiere seguir este camino y necesita más detalles, ese es más bien un caso para Stack Overflow entonces :)
gracias, aunque esta no es la solución que estaba buscando, debería ser muy fácil de implementar. Perdón por no volver antes, de alguna manera la vida real logró interponerse en el camino :(
¡Me alegro de haber podido ayudar! En caso de que realmente necesite lidiar con otros conjuntos de caracteres, eche un vistazo a iconv(como lo sugiere ComFreek) y recode(siempre es bueno tener una alternativa disponible;) Y alguien debería depurar ese realLife()procedimiento para descubrir por qué siempre se encuentra entre #D