2016-03-23 4 views
0

Ich bin auf der Suche nach einer Shell-Funktion, um einzelne geschachtelte Eigenschaft Wert aus einer Eingabe-JSON-Datei zurückzugeben.Shell-Funktion, geschachtelte JSON-Eigenschaft zurückgeben

Das Format der JSON-Datei cookie.json ist:

"personalizationID": { 
      "expires": null, 
      "path": "/api", 
      "secure": false, 
      "value": "1458234194659-16" 
     }, 
     "taxCode": { 
      "expires": null, 
      "path": "/api", 
      "secure": false, 
      "value": "aEFPyynhwJyzAHyfjXUlrGhblTtxWduqtCDMLxiD" 
     } 

So versuche ich:

cat cookie.json | grep taxCode | cut -f 7 

Aber es ist nur "taxCode": { zurück. Ich brauche eine Funktion, die, gegeben drei Parameter, Dateinamen cookie.json, äußere Eigenschaft taxCode und verschachtelteEigenschaft value, gibt mir den Wert der inneren Eigenschaft aEFPyynhwJyzAHyfjXUlrGhblTtxWduqtCDMLxiD zurück. Ich möchte keine andere Bibliothek für die Extraktion nur eines verschachtelten Werts verwenden. Wie kann ich das machen?

+0

ich mit einem harten codierten Befehl habe kommen: 'cat cookie.json | grep -A5 taxCode | grep -e "value" ' die mir zurückgeben:' "value": "aEFPyynhwJyzAHyfjXUlrGhblTtxWduqtCDMLxiD" ' Jetzt muss ich das rhs-Bit analysieren und extrahieren. –

+0

Ich kam mit dem folgenden Befehl: 'taxCode = $ (cat cookie.json | grep -A5 taxCode | grep -e" wert "| cut -f 2 -d: | sed -e 's/\" // g ') taxCode = "$ {taxCode #" $ {taxCode %% [! [: space:]] *} "}" ' Es ist empfindlich, aber es funktioniert für meinen Fall. –

Antwort

0

Hier ist eine Lösung jq verwenden. Wenn cookies.json enthält Daten korrekt Probe dann die folgenden Befehl

$ jq -M -r .taxCode.value cookies.json 

produziert

aEFPyynhwJyzAHyfjXUlrGhblTtxWduqtCDMLxiD