2010-10-12 5 views
4

Possible en double:
Parsing json with sed and awkParse JSON avec les scripts shell à linux

J'ai une chaîne JSON comme dans l'exemple ci-dessous et je veux utiliser, par exemple, la valeur de la Commande "uptime" en tant que variable dans un script shell, que dois-je faire?

{ "serverStatus": { "version": "1.6.0", "disponibilité": 527, "uptimeEstimate": 526, "localTime": { "$ date": 1286923624579}, "GlobalLock" : {"totalTime": 526604302, "lockTime": 3499842, "ratio": 0.006646056605895331, "currentQueue": {"total": 0, "readers": 0, "writers": 0}}, "mem": { "bits": 64, "resident": 150, "virtual": 76114, "supporté": true, "mappé": 75950}, "connections": {"current": 1, "disponible": 9599}, " extra_info »: { "note": "les champs varient en fonction de la plate-forme", "heap_usage_bytes": 600592, "page_faults": 1838}, "indexCounters" ....

+0

Compte tenu de l'absence d'un bash, csh, zsh, tcsh, etc bibliothèque énumérés à l'adresse http: // json.org/ - écrivez une bibliothèque et contribuez-la? – Quentin

+0

@skaffman MODIFIER LA GUERRE !!! ;-) – Josh

+2

@Josh: Toutes vos modifications appartiennent à nous. – skaffman

Répondre

6

Vous pouvez utiliser un langage de programmation avec un JSON module, ou si vous le désirez une coquille + * solution outil nix, vous pouvez utiliser awk

$ awk -F"[,:]" '{for(i=1;i<=NF;i++){if($i~/uptime\042/){print $(i+1)} } }' file 
527 
+0

Fonctionne bien pour la valeur de disponibilité dans son exemple json. Mais ne fonctionnera pas pour des valeurs comme le code html. – VMcPherron

+0

cela a fonctionné pour moi .. merci – Neethu

+0

Corrigez-moi si je me trompe, celui montré dans votre exemple est pour la comparaison de sous-chaîne .Quelle condition doit être utilisée dans if boucle pour vérifier si $ i est égal à uptime. – Neethu

1

version qui utilise Ruby:

cat file | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['serverStatus']['uptime'];"