0
votes

Analyser JSON et ItéRy Objets en utilisant JQ

{"version":"1.0","author":"user1"}

{"version":"1.0","author":"user2","timestamp":"2019-02-05"}

{"version":"1.0","author":"user3","price":"10.0"}

0 commentaires

3 Réponses :


0
votes

Pourquoi ne pas simplement filtrer vos données avec JQ lui-même?

jq -c '.[] | .metadata' data1.json


1 commentaires

Je ne connais pas le contenu des métadonnées, cela peut être n'importe quoi .. donc je ne peux donc pas définir les champs comme vous l'avez mentionné.



1
votes

Vous pouvez le faire en utilisant JTC :

si le contenu ci-dessus est dans le Fichier foo.json , vous pouvez faire: xxx

-tc signifie "format de sortie compact"

-w .. est le chemin de marche

correspondant sur 'Metadata', l Match étiquette, : signifie 'tout'


1 commentaires

Il est préférable d'utiliser l'option -r pour assurer une sortie de ligne unique pour les promenades. Ainsi, la réponse complète serait la suivante: pendant que ifs = lecture -r obj; faire des métadonnées + = ("$ obj"); fait << (JTC -W ' L:' -R DATA1.JSON)



1
votes

Tous les objets de métadonnées, une par ligne, non enveloppés dans un tableau? XXX

Mais vous faites déjà que pour votre métadata dans votre Code shell. Si vous souhaitez imprimer ce tableau un par ligne: xxx

Pour obtenir les lignes imprimées par JQ dans un tableau lorsqu'il y a des espaces dans le contenu de l'objet: < Pré> xxx

ou xxx


2 commentaires

Merci beaucoup! Cela marche!! Mais je vois un petit problème, s'il y a de l'espace dans l'une des valeurs, l'objet n'est pas stocké comme prévu. Par exemple, si "auteur": "fname lname" a des espaces dans tous les objets de métadonnées, il se décompose après FNAME.


@prathyusha a ajouté quelques façons de renseigner la matrice qui évite ce problème.