I need to override the property version
with the value of image
. The problem is, that the json document can have several forms, whereby parts of the nesting can be flattened:
Example Document 1
{
"modulesContent": {
"$edgeAgent": {
"properties.desired.modules.event-bridge-redis": {
"settings": {
"image": "redis:6.2.7",
"createOptions": ""
},
"type": "docker",
"status": "running",
"restartPolicy": "always",
"version": "1.0"
},
"properties.desired.modules.event-bridge-metrics": {
"settings": {
"image": "mcr.microsoft.com/azureiotedge-metrics-collector:1.19",
"createOptions": ""
},
"type": "docker",
"version": "1.0",
"status": "running",
"restartPolicy": "always"
}
},
"$edgeHub": {
}
}
}
Example document 2
{
"modulesContent": {
"$edgeAgent": {
"properties.desired.modules": {
"event-bridge-redis": {
"settings": {
"image": "redis:6.2.7",
"createOptions": ""
},
"type": "docker",
"status": "running",
"restartPolicy": "always",
"version": "1.0"
},
"event-bridge-metrics": {
"settings": {
"image": "mcr.microsoft.com/azureiotedge-metrics-collector:1.19",
"createOptions": ""
},
"type": "docker",
"version": "1.0",
"status": "running",
"restartPolicy": "always"
}
}
},
"$edgeHub": {
}
}
}
Expected output of Example Document 1
{
"modulesContent": {
"$edgeAgent": {
"properties.desired.modules.event-bridge-redis": {
"settings": {
"image": "redis:6.2.7",
"createOptions": ""
},
"type": "docker",
"status": "running",
"restartPolicy": "always",
"version": "redis:6.2.7"
},
"properties.desired.modules.event-bridge-metrics": {
"settings": {
"image": "mcr.microsoft.com/azureiotedge-metrics-collector:1.19",
"createOptions": ""
},
"type": "docker",
"version": "mcr.microsoft.com/azureiotedge-metrics-collector:1.19",
"status": "running",
"restartPolicy": "always"
}
},
"$edgeHub": {
}
}
}
Expected output of Example document 2
{
"modulesContent": {
"$edgeAgent": {
"properties.desired.modules": {
"event-bridge-redis": {
"settings": {
"image": "redis:6.2.7",
"createOptions": ""
},
"type": "docker",
"status": "running",
"restartPolicy": "always",
"version": "redis:6.2.7"
},
"event-bridge-metrics": {
"settings": {
"image": "mcr.microsoft.com/azureiotedge-metrics-collector:1.19",
"createOptions": ""
},
"type": "docker",
"version": "mcr.microsoft.com/azureiotedge-metrics-collector:1.19",
"status": "running",
"restartPolicy": "always"
}
}
},
"$edgeHub": {
}
}
}
Is it possible to define a single jq query, which can handle several forms of nesting (from a flat form to a nested form) and so, that the form of the input is also preserved in the output?