Idk, если JQ может сделать это простым способом, но я хотел бы спросить экспертов здесь, прежде чем переходить к другому инструменту.
Я получу массив с JSON путями, которые необходимо быть извлечены.
Эти выбранные ключи и их значения создадут файл свойств, а также будут заменены в самом JSON.
Пример:
ВХОДНЫЕ ARGS: "description" "assets.url"
^^^ мы можем изменить этот формат INPUT на assets []. url, если это упрощает обработку массивов ^^^
JSON:
{
"title": "TEST TITLE",
"description": "TEST DESCRIPTION",
"type": "Promo",
"assets": [{
"content_type": "image",
"url": "https://www.fakesite.com/image.jpg"
}, {
"content_type": "image",
"url": "https://www.fakesite.com/image2.jpg"
}]
}
Ожидаемый результат:
1) файл свойств (ключ = значение)
description=TEST DESCRIPTION
assets_0_url=https://www.fakesite.com/image.jpg
assets_1_url=https://www.fakesite.com/image2.jpg
2) преобразованный JSON файл
{
"title": "TEST TITLE",
"description": "${description}",
"type": "Promo",
"assets": [{
"content_type": "image",
"url": "${assets_0_url}"
}, {
"content_type": "image",
"url": "${assets_1_url}"
}]
}
Ключи OUTPUT (в данном случае: description, assets_0_url, assets_1_url) не обязательно должны следовать этому формату, но должны быть пронумерованы и уникальны в случае массивов.
Только требуется, чтобы ключи файла свойств OUTPUT совпадали с замененными значениями в OUTPUT JSON.
PROPERTY:
description = ОПИСАНИЕ ИСПЫТАНИЯ
JSON:
"description": " $ {description} ",
Что Я сделал так:
FIELDS="description\|assets.*url"
OUTPUT=$(jq -r 'paths(scalars) as $p | "\($p|join("_"))=\(getpath($p))"' $FILE | grep $FIELDS)
printf "%s\r" "$OUTPUT" > json.properties
Что дает мне следующий json .properties файл:
description=TEST DESCRIPTION
assets_0_url=https://www.fakesite.com/image.jpg
assets_1_url=https://www.fakesite.com/image2.jpg
Это возможно с JQ?
Заранее спасибо