3 votos

¿Cómo eliminar todos los valores menos algunos de muchos archivos JSON?

He utilizado youtube-dl para descargar todos mis vídeos de Youtube. Con estos, se crea un archivo JSON para cada archivo de vídeo. dentro de estos archivos JSON es un montón de basura. pero hay 3 elementos / valores / categorías (?) que quiero mantener, el resto puede ser eliminado.

Esas cosas son

{"upload_date": "value",
"fulltitle": "value",
"description": "value"}

Así que o bien necesito:

  • eliminar todos los elementos excepto estos 3 y guardar el archivo, o
  • extraiga estos 3 elementos a un nuevo archivo y elimine el antiguo.

¿Cómo puedo hacer esto con Automator o con herramientas de shell en Terminal?

0 votos

Puede consultar jq o miller . También está el Librería JSON para Python - si te gusta eso. Lo utilicé hace unos años para una aplicación meteorológica - hay un Canal de YouTube que me hizo empezar.

4voto

user3439894 Puntos 5883

Esta es una de las formas en que yo lo haría...

Lo siguiente fue probado y me funcionó bajo MacOS Catalina 10.15.6.

He descargado jq de https://stedolan.github.io/jq/download/ bajo la OS X sección:

En Terminal He ejecutado lo siguiente comandos :

cd ~/Downloads
xattr -d com.apple.quarantine jq-osx-amd64
sudo cp jq-osx-amd64 /usr/local/bin/jq
sudo chmod 0755 /usr/local/bin/jq

   - Nota: Si /usr/local/bin no existe ya, debe crearse primero con, por ejemplo sudo mkdir -p /usr/local/bin

Con los pasos anteriores se han establecido jq para su uso desde el línea de comandos en Terminal o de un Ejecutar Shell script acción en Automatizador o un do shell script comando utilizando AppleScript .

Descargar un vídeo de YouTube con youtube-dl utilizando el --write-info-json opción A continuación, utilicé el ejemplo shell script código que se muestra a continuación, en un Ejecutar Shell script acción en un Automatizador flujo de trabajo como Servicio/Acción Rápida para procesar el JSON archivo por lo que sólo tendría el llaves que has mencionado.

Ejemplo shell script código :

for f in "$@"; do
    [[ -f $f ]] || continue
    [[ $f =~ .*\.json$ ]] || continue
    fn="${f##*/}"
    tmpfile="$(mktemp /tmp/"${fn}.XXXXXX")" || exit 1
    /usr/local/bin/jq '{"upload_date": .upload_date, "fulltitle": .fulltitle, "description": .description}' "$f" > "$tmpfile"
    mv "$tmpfile" "$f"
done

Con esta configuración como se muestra en la imagen más abajo, selecciono el JSON archivo creado por youtube-dl utilizando el --write-info-json opción , en Buscador y luego Haga clic con el botón derecho del ratón en en él seleccionando Limpiar el JSON de youtube-dl de la menú de contexto .

A continuación, produjo un JSON archivo con lo siguiente ejemplo de estructura mientras se sobrescribe el original JSON archivo :

{
  "upload_date": "20080913",
  "fulltitle": "Jerry Seinfeld returns to Comedy on the Letterman show",
  "description": "Jerry Seinfeld returns to Comedy on the Letterman show"
}

Automator Service/Quick Action workflow


Notas:

  • El ejemplo JSON archivo se creó a partir de la salida de:

    youtube-dl --write-info-json https://www.youtube.com/watch?v=8JOsxxm-RnQ
  • El ejemplo shell script código tal y como está codificado, puede manejar múltiples seleccionados JSON archivos en Buscador al mismo tiempo.

  • Mientras que el ejemplo shell script código contiene algunos tratamiento de errores Sin embargo, no hace una copia de seguridad del original. JSON archivo(s) antes de sobrescribir. Adicional: código es necesario añadirlo si es algo que necesitas/quieres.

  • El ejemplo shell script código tal y como está codificado, no contiene ningún tratamiento de errores en lo que respecta a la jq comando y sólo está destinado a ser utilizado en JSON archivos creado por youtube-dl utilizando el --write-info-json opción con el supuesto de que el objetivo llaves siempre existen en estas circunstancias. De lo contrario, los tratamiento de errores puede ser necesario.

  • El formato del JSON archivos creado por youtube-dl utilizando el --write-info-json opción son con formato plano es decir, se escribe todo en una sola línea. La salida del jq comando tal y como está escrito, produce multi-línea salida. Si desea con formato plano de salida, puede utilizar el -c opción Por ejemplo,..: jq -c ...

  • El ejemplo shell script código puede utilizarse en un shell script y se ejecuta desde el línea de comandos en Terminal .

  • El tratamiento de errores puede ser eliminado del ejemplo shell script código y formateado para que también pueda ser utilizado como un one-liner después de cambiar de directorio el donde el JSON archivos se encuentran, por ejemplo:

    for f in *.json; do jq '{"upload_date": .upload_date, "fulltitle": .fulltitle, "description": .description }' "$f" > "tmp"; mv tmp "$f"; done

       - Nota: Esto sobrescribe el original archivo sin una copia de seguridad.

  • NOTA: JSON archivos no son archivos de texto ordinario en sí mismos, sino que están especialmente formateados, y no se debe analizar con servicios públicos como sed , awk etc., y en su lugar utilizar un utilidad diseñado expresamente para trabajar con Notación de objetos de JavaScript (JSON) archivos ¡! jq es un utilidad diseñado para trabajar con JSON archivos .

2 votos

OMG GRACIAS GRACIAS GRACIAS!!! eso estaba perfectamente explicado y EXACTAMENTE lo que necesitaba. Tanto aprecio!!!!! estoy impresionado por su generosidad y solución detallada.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X