Problème Général
Si je vais peut-être le diagnostic de la cause d'un événement, de déterminer le nombre d'utilisateurs touchés, ou de la distillation de la synchronisation des journaux afin d'évaluer les performances et le débit de l'impact d'une récente modification du code, mes outils restent les mêmes: grep
, awk
, sed
, tr
, uniq
, sort
, zcat
, tail
, head
, join
, et split
. Pour la colle tous ensemble, Unix nous donne des tuyaux, et pour les amateur de filtrage, nous avons xargs
. Si ces derniers ne parviennent pas moi, il y a toujours perl -e
.
Ces outils sont parfaits pour le traitement des fichiers CSV, fichiers délimités par des tabulations, les fichiers journaux prévisible format de la ligne, ou des fichiers avec séparées par des virgules paires clé-valeur. En d'autres termes, les fichiers où chaque ligne a un côté pas de contexte.
XML Analogues
J'ai récemment eu besoin de chalut par Gigaoctets de XML pour construire l'histogramme de l'utilisation par l'utilisateur. C'était assez facile avec les outils que j'avais, mais pour les questions plus complexes de la normale approches briser. Dire que j'ai des fichiers avec des articles comme ceci:
<foo user="me">
<baz key="zoidberg" value="squid" />
<baz key="leela" value="cyclops" />
<baz key="fry" value="rube" />
</foo>
Et disons que je veux produire une cartographie de l'utilisateur nombre moyen d' <baz>
s par <foo>
. Traitement ligne par ligne n'est plus une option: j'ai besoin de savoir qui de l'utilisateur <foo>
, je suis en train d'inspecter donc je sais dont la durée moyenne de mise à jour. Toute sorte de Unix un liner qui accomplit cette tâche est susceptible d'être impénétrable.
Heureusement, dans XML-terre, nous avons de merveilleux technologies comme XPath, XQuery et XSLT pour nous aider.
Auparavant, j'avais pris l'habitude d'utiliser le merveilleux XML::XPath
module Perl pour accomplir des requêtes comme celle-ci, mais après la découverte d'une TextMate Plugin qui pourrait exécuter une expression XPath contre ma fenêtre, j'ai arrêté d'écrire un arrêt de scripts Perl pour la requête XML. Et je viens de découvrir sur XMLStarlet qui est de l'installation que je tape, et j'ai hâte d'utiliser à l'avenir.
JSON Solutions?
Donc ce qui m'amène à ma question: existe-il des outils de ce genre pour JSON? C'est seulement une question de temps avant que certains tâche de l'enquête m'oblige à effectuer des requêtes sur des fichiers JSON, et sans outils comme XPath et XSLT, une telle tâche sera beaucoup plus difficile. Si j'avais un tas de JSON qui ressemblait à ceci:
{
"firstName": "Bender",
"lastName": "Robot",
"age": 200,
"address": {
"streetAddress": "123",
"city": "New York",
"state": "NY",
"postalCode": "1729"
},
"phoneNumber": [
{ "type": "home", "number": "666 555-1234" },
{ "type": "fax", "number": "666 555-4567" }
]
}
Et je voulais trouver le nombre moyen de numéros de téléphone de chaque personne avait, je pourrais faire quelque chose comme ça avec XPath:
fn:avg(/fn:count(phoneNumber))
Questions
- Existe-il des outils de ligne de commande qui peut "requête" des fichiers JSON dans ce de la sorte?
- Si vous avez à traiter un tas de Des fichiers JSON sur une ligne de commande Unix, quels outils utilisez-vous?
- Diable, est-il même travail effectué pour faire un langage de requête comme ceci pour JSON?
- Si vous utilisez des outils de ce genre dans votre journée-à-jour de travail, que faites-vous aime/aime pas parler d'eux? Sont là tout pièges?
Je m'aperçois de plus en plus et de sérialisation des données est effectué à l'aide de JSON, de sorte que les outils de traitement, comme ce sera crucial lors de l'analyse de données de grande taille des images dans l'avenir. Les bibliothèques de langue pour JSON sont très fortes et il est assez facile d'écrire des scripts pour faire ce genre de traitement, mais pour vraiment laisser les gens jouer avec les données shell outils sont nécessaires.