如何使用 `jq` 通过组合一些值来转换 json?
How to use `jq` to convert a json by combine some of the values?
说我有一个 JSON:
{
"name":"my-project",
"projects" : [
{
"project": "core",
"configurations": [
{
"configuration": "compile",
"dependencies" : [
{
"organization": "a11",
"name" : "b11",
"version" : "1.1"
},
{
"organization": "a22",
"name" : "b22",
"version" : "2.2",
"dependencies" : [
{
"organization": "a33",
"name" : "b33",
"version" : "3.3"
}
]
}
]
}
]
}
]
}
如何使用 jq
将 JSON 转换为:
{
"name":"my-project",
"projects" : [
{
"project": "core",
"configurations": [
{
"configuration": "compile",
"dependencies" : [
{
"dep" : "a11:b11:1.1"
},
{
"dep": "a22:b22:2.2",
"dependencies" : [
{
"dep": "a33:b33:3.3"
}
]
}
]
}
]
}
]
}
借助函数,您可以递归地执行此操作。
def update_dependencies:
{ dep: "\(.organization):\(.name):\(.version)" }
+
with_entries(select(.key == "dependencies") | .value |= map(update_dependencies))
;
.projects |= map(
.configurations |= map(
.dependencies |= map(update_dependencies)
)
)
说我有一个 JSON:
{
"name":"my-project",
"projects" : [
{
"project": "core",
"configurations": [
{
"configuration": "compile",
"dependencies" : [
{
"organization": "a11",
"name" : "b11",
"version" : "1.1"
},
{
"organization": "a22",
"name" : "b22",
"version" : "2.2",
"dependencies" : [
{
"organization": "a33",
"name" : "b33",
"version" : "3.3"
}
]
}
]
}
]
}
]
}
如何使用 jq
将 JSON 转换为:
{
"name":"my-project",
"projects" : [
{
"project": "core",
"configurations": [
{
"configuration": "compile",
"dependencies" : [
{
"dep" : "a11:b11:1.1"
},
{
"dep": "a22:b22:2.2",
"dependencies" : [
{
"dep": "a33:b33:3.3"
}
]
}
]
}
]
}
]
}
借助函数,您可以递归地执行此操作。
def update_dependencies:
{ dep: "\(.organization):\(.name):\(.version)" }
+
with_entries(select(.key == "dependencies") | .value |= map(update_dependencies))
;
.projects |= map(
.configurations |= map(
.dependencies |= map(update_dependencies)
)
)