I need to merge two json objects by key value in a bash script:
It is necessary to find by key (MAC address) the corresponding object (value) and add to its pairs the key: value pair of another object.
<code>{"mac": "14:88:00:00:00:50", "key1": "value1", "key2": "value2"}
и
{
"interfaces":{
"m-11s-0": {
"peers": {
"14:88:00:00:00:13":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"3",
"path_change_count":"43",
"metric":"357"
},
"14:88:00:00:00:50":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"2",
"path_change_count":"13",
"metric":"163"
},
"14:88:00:00:00:85":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"1",
"path_change_count":"1",
"metric":"48"
}
}
}
}
}
</code>
<code>{"mac": "14:88:00:00:00:50", "key1": "value1", "key2": "value2"}
и
{
"interfaces":{
"m-11s-0": {
"peers": {
"14:88:00:00:00:13":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"3",
"path_change_count":"43",
"metric":"357"
},
"14:88:00:00:00:50":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"2",
"path_change_count":"13",
"metric":"163"
},
"14:88:00:00:00:85":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"1",
"path_change_count":"1",
"metric":"48"
}
}
}
}
}
</code>
{"mac": "14:88:00:00:00:50", "key1": "value1", "key2": "value2"}
и
{
"interfaces":{
"m-11s-0": {
"peers": {
"14:88:00:00:00:13":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"3",
"path_change_count":"43",
"metric":"357"
},
"14:88:00:00:00:50":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"2",
"path_change_count":"13",
"metric":"163"
},
"14:88:00:00:00:85":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"1",
"path_change_count":"1",
"metric":"48"
}
}
}
}
}
Found the right object:
<code>logstatus_JSON=$(cat logstatus.sample)
echo "$logstatus_JSON" | jq -c '.interfaces["m-11s-0"].peers' | jq -r 'to_entries[] | if "(.key)" == "14:88:00:00:00:50" then "(.value)" else "zero" end'
</code>
<code>logstatus_JSON=$(cat logstatus.sample)
echo "$logstatus_JSON" | jq -c '.interfaces["m-11s-0"].peers' | jq -r 'to_entries[] | if "(.key)" == "14:88:00:00:00:50" then "(.value)" else "zero" end'
</code>
logstatus_JSON=$(cat logstatus.sample)
echo "$logstatus_JSON" | jq -c '.interfaces["m-11s-0"].peers' | jq -r 'to_entries[] | if "(.key)" == "14:88:00:00:00:50" then "(.value)" else "zero" end'
There is very little information in the jq documentation.
Please help me figure this out.
But I don’t know how to combine two objects to get this result:
<code>{
"interfaces":{
"m-11s-0": {
"peers": {
"14:88:00:00:00:13":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"3",
"path_change_count":"43",
"metric":"357"
},
"14:88:00:00:00:50":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"2",
"path_change_count":"13",
"metric":"163",
"key1": "value1",
"key2": "value2"
},
"14:88:00:00:00:85":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"1",
"path_change_count":"1",
"metric":"48"
}
}
}
}
}
</code>
<code>{
"interfaces":{
"m-11s-0": {
"peers": {
"14:88:00:00:00:13":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"3",
"path_change_count":"43",
"metric":"357"
},
"14:88:00:00:00:50":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"2",
"path_change_count":"13",
"metric":"163",
"key1": "value1",
"key2": "value2"
},
"14:88:00:00:00:85":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"1",
"path_change_count":"1",
"metric":"48"
}
}
}
}
}
</code>
{
"interfaces":{
"m-11s-0": {
"peers": {
"14:88:00:00:00:13":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"3",
"path_change_count":"43",
"metric":"357"
},
"14:88:00:00:00:50":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"2",
"path_change_count":"13",
"metric":"163",
"key1": "value1",
"key2": "value2"
},
"14:88:00:00:00:85":{
"next_hop":"14:88:00:00:00:85",
"hop_count":"1",
"path_change_count":"1",
"metric":"48"
}
}
}
}
}