Ich habe den folgenden Code im Befehlszeilenskript:
output_json=$(jq -n \
--argjson ID "${id}" \
--arg Title "${title}" \
--argjson like "\"${like}\"" \
'$ARGS.named')
Ich habe die Variablen id
, title
und like
in die jq
eingefügt. Ich bekomme folgende Ausgabe:
[
{
"ID": 6,
"Title": "ABC",
"like": ""
},
{
"ID": 22,
"Title": "ABC",
"like": "Yes"
}
]
Aber ich versuche, die Ausgabe im folgenden Format zu erhalten, dh mit null:
[
{
"ID": 6,
"Title": "ABC",
"like": null
},
{
"ID": 22,
"Title": "ABC",
"like": "Yes"
}
]
Ich verstehe nicht ganz, ob das generell möglich ist, oder ist es ein Problem mit meinem jq
-Befehl?
Und soweit ich verstanden habe ist "like": ""
nicht dasselbe wie "like": null
. Ich bin jetzt auch ein wenig verwirrt und verstehe nicht wirklich, was die richtige Wahl ist.
🤔 А знаете ли вы, что...
С помощью Bash можно создавать скрипты, выполняющие резервное копирование и синхронизацию данных.
Wenn Sie --argjson
verwenden, müssen Sie ein gültiges JSON-codiertes Argument angeben. Wenn Sie also null
erhalten möchten, muss der Wert buchstäblich null
sein. Ihre Lösung fügt jedoch Anführungszeichen hinzu, sodass sie niemals zu null
ausgewertet werden kann. (Außerdem ist es nur dann eine gültige JSON-Zeichenfolge, wenn sie der JSON-Codierung für Sonderzeichen wie die Anführungszeichen selbst folgt).
Wenn Sie im Normalfall einen JSON-String haben möchten und null
im Fall, dass er leer ist, importieren Sie den Inhalt von ${like}
als String mit --arg
und ohne die zusätzlichen Anführungszeichen (genau wie Sie es mit ${title}
tun), dann verwenden Sie einige jq
Logik, um die leere Zeichenfolge in null
umzuwandeln. Eine if
-Anweisung würde zum Beispiel reichen:
like=
jq -n --arg like "${like}" '{like: (if $like == "" then null else $like end)}'
{
"like": null
}