2017-10-24 3 views
1

Ich mag würde den Wert der Mitglieder und id von unten jq Ausgabe drucken:jq: Fehler: Anzahl und String nicht hinzugefügt werden können

$ cat test_|jq -r '.[] | select(.name=="AAA") | .' 
{ 
    "name": "AAA", 
    "members": 10, 
    "profiles": 0, 
    "templates": 0, 
    "ldapGroups": 0, 
    "ldapMembers": 0, 
    "id": "20" 
} 

Leider arbeiten für einen von jedem nur sie:

$ cat test_|jq -r '.[] | select(.name=="AAA") | .members' 
10 

mit +“„+ ich erhalte Fehler:

$ cat test_|jq -r '.[] | select(.name=="AAA") | .members+" "+.id' 
jq: error: number and string cannot be added 

Antwort

0

Convert Nummer String mit tostring Funktion:

jq -r '.[] | select(.name=="AAA") | (.members|tostring) +" "+ .id test' 
2

Ich empfehle, string interpolation zu verwenden. Es wird automatisch Eingang in eine Zeichenfolge, falls erforderlich:

jq -r '.[]|select(.name=="AAA")|"\(.members) \(.id)"' file.json 
0

Sie nicht genau festgelegt haben, wie Sie die beiden Werte angezeigt werden sollen, so ist es beachtenswert, dass Sie schreiben können:

.... | (.members, .id) 

oder

.... | [.members, .id] 

oder

.... | [.members, .id] | E 

wo E könnte @csv oder @tsv oder etc. sein. In jq 1.5, join/1 wird auch die Typumwandlung.

+0

Das OP erwähnte '.members +" "+ .id'' in der Frage, die ihnen den Fehler" Nummer und String kann nicht hinzugefügt werden "gibt. Imo, das ist ziemlich klar. – hek2mgl

0

Sie könnten damit beginnen, nur die interessierenden Mitglieder zu projizieren. z

$ jq -Mc '.[] | select(.name=="AAA") | {members,id}' data.json 
{"members":10,"id":"20"} 

Jetzt können Sie sehen .members eine Zahl und .id ist eine Zeichenfolge. Sie können sie nicht direkt mit + hinzufügen, aber Sie können eine der in den anderen Antworten erläuterten Optionen auswählen.

Verwandte Themen