Wie verwende ich jq, um Zahlen in Zeichenfolgen umzuwandeln?


73

Mit dem folgenden jq-Befehl und Json:

jq '.[]|[.string,.number]|join(": ")' <<< '
[
  {
    "number": 3,
    "string": "threee"
  },
  {
    "number": 7,
    "string": "seven"
  }
]
'

Ich versuche, die Ausgabe wie folgt zu formatieren:

three: 3
seven: 7

Leider führt mein Versuch zu folgendem Fehler:

jq: error: string und number können nicht hinzugefügt werden

Wie konvertiere ich die Zahl in einen String, damit beide verbunden werden können?

Antworten:


75

Der Befehl jq hat die Funktion tostring . Ich habe eine Weile gebraucht, um zu lernen, wie man es durch Ausprobieren benutzt. So verwenden Sie es:

jq -r '.[] | [ .string, .number|tostring ] | join(": ")' <<< '
[{ "number": 9, "string": "nine"},
 { "number": 4, "string": "four"}]
'
nine: 9
four: 4

2
Vielen Dank, sehr hilfreich. Ich finde jq schwer zu bedienen und schlecht dokumentiert, daher helfen diese Beispiele wirklich.
Onkel Long Hair

42

Ein alternatives und wohl intuitiveres Format ist:

jq '.[] | .string + ": " + (.number|tostring)' <<< ...

Erwähnenswert ist die Notwendigkeit von Parens .number|tostring.


Für meinen Anwendungsfall musste ich die Klammern behalten, um die Dinge zu priorisieren. Es ist besser, sie für allgemeine Anwendungsfälle aufzubewahren.
SebMa


-1

Verwenden Sie den Opearator 'map_values', um Objekte zu ändern

Beispiel

{"foo": {"bar": 3}}

.foo.bar = .foo.bar | map_values ​​(tostring)

Ausgabe

{"foo": {"bar": "3"}}

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.