3 votes

Comment supprimer toutes les valeurs, sauf certaines, de plusieurs fichiers JSON ?

J'ai utilisé youtube-dl pour télécharger toutes mes vidéos de Youtube. Avec ceux-ci, sont créés un fichier JSON pour chaque fichier vidéo. à l'intérieur de ces fichiers JSON est beaucoup de déchets. mais il ya 3 éléments / valeurs / catégories ( ?) que je veux garder, le reste peut être supprimé.

Ces choses sont

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

Donc je dois soit :

  • supprimer tous les éléments sauf ces 3 éléments et enregistrer le fichier, ou
  • extraire ces 3 éléments dans un nouveau fichier et supprimer l'ancien.

Comment puis-je faire cela avec Automator ou avec des outils shell dans le Terminal ?

0 votes

Vous pouvez consulter jq o miller . Il y a aussi le Bibliothèque JSON pour Python - si cela vous intéresse. Je l'ai utilisé il y a quelques années pour une application météo. Chaîne YouTube qui m'a permis de démarrer.

4voto

user3439894 Points 52496

Voici une des façons dont je le ferais...

Ce qui suit a été testé et a fonctionné pour moi sous MacOS Catalina 10.15.6.

J'ai téléchargé jq de https://stedolan.github.io/jq/download/ en vertu de la OS X section :

Sur Terminal j'ai exécuté le programme suivant commandes :

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 n'existe pas déjà, il doit d'abord être créé avec par exemple : sudo mkdir -p /usr/local/bin

Les étapes susmentionnées ont maintenant mis en place jq à utiliser à partir du ligne de commande sur Terminal ou d'un Exécuter le Shell script action sur Automator ou un do shell script commande en utilisant AppleScript .

Téléchargement d'une vidéo à partir de YouTube avec youtube-dl en utilisant le --write-info-json option J'ai ensuite utilisé la fonction exemple shell script code illustré ci-dessous, dans un Exécuter le Shell script action dans un Automator flux de travail en tant que Service/action rapide pour traiter le JSON fichier pour qu'il n'y ait que le clés dont vous avez parlé.

Exemple shell script code :

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

Avec cette configuration, comme le montre l'image ci-dessous, je sélectionne l'icône de l'ordinateur. JSON fichier créé par youtube-dl en utilisant le --write-info-json option en Finder et ensuite Cliquez à droite sur sur elle en sélectionnant Nettoyer le JSON de youtube-dl de la menu contextuel .

Elle a ensuite produit un JSON fichier avec les éléments suivants exemple de structure tout en écrasant l'original JSON fichier :

{
  "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


Notes :

  • L'exemple JSON fichier a été créé à partir de la sortie de :

    youtube-dl --write-info-json https://www.youtube.com/watch?v=8JOsxxm-RnQ
  • El exemple shell script code tel qu'il est codé, peut gérer de multiples sélections JSON fichiers sur Finder en même temps.

  • Alors que le exemple shell script code contient quelques gestion des erreurs Néanmoins, il ne sauvegarde pas l'original JSON fichier(s) avant de l'écraser. Supplémentaire code doit être ajouté si vous en avez besoin ou si vous le souhaitez.

  • El exemple shell script code tel que codé, ne contient pas de traitement des erreurs en ce qui concerne le jq commande utilisé et n'est destiné qu'à être utilisé sur JSON fichiers créé par youtube-dl en utilisant le --write-info-json option en supposant que la cible clés existent toujours dans les circonstances. Dans le cas contraire, des gestion des erreurs peut être nécessaire.

  • Le format de la JSON fichiers créé par youtube-dl en utilisant le --write-info-json option sont formaté à plat c'est-à-dire qu'il est écrit sur une seule ligne. La sortie de l jq commande tel qu'il est rédigé, produit multi-ligne sortie. Si vous souhaitez formaté à plat vous pouvez utiliser l'option -c option par exemple : jq -c ...

  • El exemple shell script code peut être utilisé dans une shell script rendu exécutable, et exécuté à partir du ligne de commande sur Terminal .

  • El traitement des erreurs peuvent être retirés de la exemple shell script code et formaté de manière à pouvoir être utilisé en une seule ligne après le changement de répertoire où l'option JSON fichiers sont situés. Par exemple :

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

       - Nota: Cela remplace l'original fichier sans sauvegarde.

  • NOTE : JSON fichiers ne sont pas des fichiers texte ordinaires en soi, ils sont spécialement formatés et il ne faut pas analyser avec services publics comme sed , awk etc., et utiliser plutôt un utilitaire conçu expressément pour fonctionner avec Notation des objets JavaScript (JSON) fichiers ! jq es un utilitaire conçu pour fonctionner avec JSON fichiers .

2 votes

OMG MERCI MERCI MERCI MERCI ! !! c'était PARFAITEMENT expliqué et EXACTEMENT ce dont j'avais besoin. Tellement d'appréciation !!!!! je suis époustouflé par votre générosité et votre solution détaillée.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X