我希望从从另一个json获取的变量中创建一个新的json文件。我是jq的初学者。
while read -r id name name_with_namespace
do
echo "$id : $name"
vivariables=$(curl --progress-bar -X GET --header "Content-Type: application/json" --header "Authorization: bearer ${token}" "$GitlabServerURL/api/v4/projects/$id/variables")
JSON_STRING=$( jq -n \
--arg id "$id" \
--arg project_name "$name" \
--arg project_path "$name_with_namespace" \
--arg project_variables "$variables" \
'{id: $id, project_name: $project_name, project_path: $project_path, project_variables: $project_variables}' )
echo $JSON_STRING >> variables_projects.json
done < <(jq -r '.[] | "\(.id) \(.name) \(.name_with_namespace) "' < projects.json)
我用脚本恢复的部分数据的示例:
{ "id": "200", "project_name": "spring-boot-remove", "project_path": "agpm / templates / ansible / spring-boot-remove", "project_variables": "[]" }
{ "id": "199", "project_name": "agpm-gitleaks", "project_path": "DevSecOps / agpm-gitleaks", "project_variables": "[]" }
{ "id": "198", "project_name": "haproxy", "project_path": "Infra / Projets / nexo / haproxy", "project_variables": "[]" }
我希望得到的是:
[{ "id": "200", "project_name": "spring-boot-remove", "project_path": "agpm / templates / ansible / spring-boot-remove", "project_variables": "[]" },
{ "id": "199", "project_name": "agpm-gitleaks", "project_path": "DevSecOps / agpm-gitleaks", "project_variables": "[]" },
{ "id": "198", "project_name": "haproxy", "project_path": "Infra / Projets / nexo / haproxy", "project_variables": "[]" }]
发布于 2021-06-24 13:36:02
这是因为在bash循环中逐行生成JSON对象。我认为实现目标的最快方法是处理输出文件(variables_projects.json
)。
jq -s . variables_projects.json | sponge variables_projects.json
输出
[
{
"id": "200",
"project_name": "spring-boot-remove",
"project_path": "agpm / templates / ansible / spring-boot-remove",
"project_variables": "[]"
},
{
"id": "199",
"project_name": "agpm-gitleaks",
"project_path": "DevSecOps / agpm-gitleaks",
"project_variables": "[]"
},
{
"id": "198",
"project_name": "haproxy",
"project_path": "Infra / Projets / nexo / haproxy",
"project_variables": "[]"
}
]
对于紧凑的输出,添加-c
选项:
jq -cs . variables_projects.json | sponge variables_projects.json
输出:
[{"id":"200","project_name":"spring-boot-remove","project_path":"agpm / templates / ansible / spring-boot-remove","project_variables":"[]"},{"id":"199","project_name":"agpm-gitleaks","project_path":"DevSecOps / agpm-gitleaks","project_variables":"[]"},{"id":"198","project_name":"haproxy","project_path":"Infra / Projets / nexo / haproxy","project_variables":"[]"}]
从医生那里:
--slurp/-s:不是为输入中的每个JSON对象运行过滤器,而是将整个输入流读入一个大数组中,只运行一次。-紧凑-输出/ -c:默认情况下,jq漂亮-打印JSON输出。使用此选项将导致更紧凑的输出,方法是将每个JSON对象放在一行上。
https://stackoverflow.com/questions/68111789
复制相似问题