Using the following json document :
{
"connections": {
"7MXYADN-WDXFLSC-3JBG57R-JHZXXYP-ZROJDED-YFQYNCL-WTHPSOQ-KHOLXAP": {
"address": "",
"at": "0001-01-01T00:00:00Z",
"clientVersion": "",
"connected": false,
"crypto": "",
"inBytesTotal": 0,
"isLocal": false,
"outBytesTotal": 0,
"paused": false
},
"QYMGEAI-FXM6I6W-FQ574FL-XABEKPV-VK5M42T-AQ7TERD-VVEJ2F7-SFSRYQG": {
"address": "",
"at": "0001-01-01T00:00:00Z",
"clientVersion": "",
"connected": false,
"crypto": "",
"inBytesTotal": 0,
"isLocal": false,
"outBytesTotal": 0,
"paused": false
}
}
}
I would like to filter it using jq get a "connection.(value?)": "connection.(value?).connected"
report using only command-line tools:
{
"7MXYADN-WDXFLSC-3JBG57R-JHZXXYP-ZROJDED-YFQYNCL-WTHPSOQ-KHOLXAP": false,
"QYMGEAI-FXM6I6W-FQ574FL-XABEKPV-VK5M42T-AQ7TERD-VVEJ2F7-SFSRYQG": false
}
The best results I catched is below. I can't find a better way to iterate twice those values correctly and to get rid of "id" & "status" keys.
$ jq '{ id: .connections | keys[] , status : .connections[].connected }' < demo.json
{
"id": "7MXYADN-WDXFLSC-3JBG57R-JHZXXYP-ZROJDED-YFQYNCL-WTHPSOQ-KHOLXAP",
"status": false
}
{
"id": "7MXYADN-WDXFLSC-3JBG57R-JHZXXYP-ZROJDED-YFQYNCL-WTHPSOQ-KHOLXAP",
"status": false
}
{
"id": "QYMGEAI-FXM6I6W-FQ574FL-XABEKPV-VK5M42T-AQ7TERD-VVEJ2F7-SFSRYQG",
"status": false
}
{
"id": "QYMGEAI-FXM6I6W-FQ574FL-XABEKPV-VK5M42T-AQ7TERD-VVEJ2F7-SFSRYQG",
"status": false
}
I think I have to figure what is the (value?)
thing and how to deal with.
Thank you
Using the following json document :
{
"connections": {
"7MXYADN-WDXFLSC-3JBG57R-JHZXXYP-ZROJDED-YFQYNCL-WTHPSOQ-KHOLXAP": {
"address": "",
"at": "0001-01-01T00:00:00Z",
"clientVersion": "",
"connected": false,
"crypto": "",
"inBytesTotal": 0,
"isLocal": false,
"outBytesTotal": 0,
"paused": false
},
"QYMGEAI-FXM6I6W-FQ574FL-XABEKPV-VK5M42T-AQ7TERD-VVEJ2F7-SFSRYQG": {
"address": "",
"at": "0001-01-01T00:00:00Z",
"clientVersion": "",
"connected": false,
"crypto": "",
"inBytesTotal": 0,
"isLocal": false,
"outBytesTotal": 0,
"paused": false
}
}
}
I would like to filter it using jq get a "connection.(value?)": "connection.(value?).connected"
report using only command-line tools:
{
"7MXYADN-WDXFLSC-3JBG57R-JHZXXYP-ZROJDED-YFQYNCL-WTHPSOQ-KHOLXAP": false,
"QYMGEAI-FXM6I6W-FQ574FL-XABEKPV-VK5M42T-AQ7TERD-VVEJ2F7-SFSRYQG": false
}
The best results I catched is below. I can't find a better way to iterate twice those values correctly and to get rid of "id" & "status" keys.
$ jq '{ id: .connections | keys[] , status : .connections[].connected }' < demo.json
{
"id": "7MXYADN-WDXFLSC-3JBG57R-JHZXXYP-ZROJDED-YFQYNCL-WTHPSOQ-KHOLXAP",
"status": false
}
{
"id": "7MXYADN-WDXFLSC-3JBG57R-JHZXXYP-ZROJDED-YFQYNCL-WTHPSOQ-KHOLXAP",
"status": false
}
{
"id": "QYMGEAI-FXM6I6W-FQ574FL-XABEKPV-VK5M42T-AQ7TERD-VVEJ2F7-SFSRYQG",
"status": false
}
{
"id": "QYMGEAI-FXM6I6W-FQ574FL-XABEKPV-VK5M42T-AQ7TERD-VVEJ2F7-SFSRYQG",
"status": false
}
I think I have to figure what is the (value?)
thing and how to deal with.
Thank you
Share Improve this question edited Feb 6 at 14:32 DarkBee 15.6k8 gold badges70 silver badges115 bronze badges asked Feb 6 at 14:30 JBDJBD 333 bronze badges 1 |3 Answers
Reset to default 1Use with_entries
to update the .value
of the object to the value of .connected
:
.connections | with_entries(.value = .value.connected)
JqPlay Demo
{
"7MXYADN-WDXFLSC-3JBG57R-JHZXXYP-ZROJDED-YFQYNCL-WTHPSOQ-KHOLXAP": false,
"QYMGEAI-FXM6I6W-FQ574FL-XABEKPV-VK5M42T-AQ7TERD-VVEJ2F7-SFSRYQG": false
}
You can use map_values
:
jq '.connections | map_values(.connected)' input.json
Here's how to tweak your original code (incase you were wondering):
# your original code
jq '{ id: .connections | keys[], status: .connections[].connected }'
# updated code
jq '[{ key: .connections | keys[], value: .connections[].connected }] | from_entries'
[1] Wrap in array, [2] change {id,status} to {key,value}, [3] convert using from_entries
jq -n '[{"key":"a","value":1},{"key":"b","value":2}] | from_entries'
will output => {"a": 1, "b": 2}
jq '.connections | .[] |= .connected' demo.json
. Demo – pmf Commented Feb 6 at 16:14