2017-07-08 7 views
1

ich eine große Menge von JSON haben aus einer 3rd-Party-System, das Ich mag würde mit jq vorverarbeitet, aber ich habe Schwierigkeiten die Abfrage Komponieren, folgt Testfall:Ungültige Zahlenliteral mit jq

$ cat test.json 
{ 
    "a": "b", 
    "c": "d", 
    "e": { 
     "1": { 
      "f": "g", 
      "h": "i" 
      } 
     } 
} 
$ cat test.json|jq .e.1.f 
jq: error: Invalid numeric literal at EOF at line 1, column 3 (while parsing '.1.') at <top-level>, line 1: 
.e.1.f 

Wie würde ich "g" als meine Ausgabe hier bekommen? Oder wie kann ich diese 1 zu einer "1" umwandeln, damit sie korrekt behandelt wird?

Antwort

1

Von jq manual:

Sie können auch ein Objekt nachschlagen Felder mit Syntax wie [ "foo"] (.foo oben ist eine Kurzversion davon, aber nur für Identifikator-like. Zeichenfolgen).

Sie müssen Anführungszeichen auch und verwenden -r wenn Sie Rohausgangssignal wollen:

jq -r '.e["1"].f' test.json 
+0

Perfekt Dank - ich hatte ein paar Dinge ausprobiert, aber es kam nie zu mir, dass ich "innen‘ verwenden müssten. – Gaius

+2

Sie müssen auch nicht unbedingt die eckigen Klammern verwenden, es könnte einfach sein: '.e." 1 ".f' –