I have a json file like this:
{
"arrays": [
"a_string",
{
"name": "foo",
"properties": [
{
"type": "some_type1",
"url": "https://example.com",
"checksum": "d6fd580fe890b826250aa5d5a88bcdb28839cff4d447ba51536cda4ceae89c4e"
}
]
},
"another_string",
{
"name": "bar",
"properties": [
{
"type": "some_type2",
"url": "https://example.org",
"checksum": "d6fd580fe890b826250aa5d5a88bcdb28839cff4d447ba51536cda4ceae89c4e"
}
]
}
]
}
I want to modify "a_string" to say "b_string" and the properties block of foo with something like jq '(.arrays[]| select(.name == "foo")).sources |= [{"type" : "sometypeB", "file" : "filename"}]'.
But select(.name == "foo") fails here due to the string not having any name, any idea how I can modify both?
The final json should look like:
{
"arrays": [
"b_string",
{
"name": "foo",
"properties": [
{
"type": "sometypeB",
"file": "filename"
}
]
},
"another_string",
{
"name": "bar",
"properties": [
{
"type": "some_type2",
"url": "https://example.org",
"checksum": "d6fd580fe890b826250aa5d5a88bcdb28839cff4d447ba51536cda4ceae89c4e"
}
]
}
]
}
Here is a way:
Online demo