将 json 值重塑为值内容
Reshape json values to value content
我不确定这对 jq 是否可行,但如果是的话我会很高兴。
我收到的数据必须转换为我使用的工具构建参数。
一个工具需要以下字符串作为参数(它不是 json 或 json 对象 - 简单字符串):
-parameter="{<IP>,[<NAME>,<ALIAS>],<COMMENT>}"
我收到的源数据是 json 看起来像这样
{
"MAINSERVER": {
"COMMENT": "Server",
"IP": "1.1.1.1",
"NAME": "Server1",
"VERSION": "19.4"
},
"DATASERVER": [
{
"ALIAS": "alias02",
"IP": "1.1.1.2",
"NAME": "server02"
},
{
"ALIAS": "alias03",
"IP": "1.1.1.3",
"NAME": "server03"
}
]
}
我想将 DATASERVER 中的每个对象数组转换为字符串并将其推送到关键参数。
{
"parameter": [
"{1.1.1.2,[server02,alias02],staticComment}",
"{1.1.1.3,[server03,alias03],staticComment}"
]
}
非常感谢任何支持。
好的,我自己搞定了。我认为它更复杂。
这是我的查询
.DATASERVER | map((\"{\" + .NAME + \",[\" + .IP + \",\" + .ALIAS + \"]}\") ) | {parameter: [.] }
结果
{
"parameter": [
[
"{server02,[1.1.1.2,alias02]}",
"{server03,[1.1.1.3,alias03]}"
]
]
}
生成问题的示例输出
{parameter: .DATASERVER | map("{\(.IP),[\(.NAME),\(.ALIAS)],staticComment}")}
{
"parameter": [
"{1.1.1.2,[server02,alias02],staticComment}",
"{1.1.1.3,[server03,alias03],staticComment}"
]
}
以更简单的方式从您自己的解决方案生成输出
{parameter: [.DATASERVER | map("{\(.NAME),[\(.IP),\(.ALIAS)]}")]}
{
"parameter": [
[
"{server02,[1.1.1.2,alias02]}",
"{server03,[1.1.1.3,alias03]}"
]
]
}
从给定的模板开始,您可以编写:
jq --arg parameter "{<IP>,[<NAME>,<ALIAS>],<COMMENT>}" '
[.DATASERVER[] as $l
| $parameter
| sub("<IP>"; $l.IP)
| sub("<NAME>"; $l.NAME)
| sub("<ALIAS>"; $l.ALIAS)
| sub("<COMMENT>"; $l.COMMENT // "staticComment") ]
| {parameter: .}
'
我不确定这对 jq 是否可行,但如果是的话我会很高兴。
我收到的数据必须转换为我使用的工具构建参数。
一个工具需要以下字符串作为参数(它不是 json 或 json 对象 - 简单字符串):
-parameter="{<IP>,[<NAME>,<ALIAS>],<COMMENT>}"
我收到的源数据是 json 看起来像这样
{
"MAINSERVER": {
"COMMENT": "Server",
"IP": "1.1.1.1",
"NAME": "Server1",
"VERSION": "19.4"
},
"DATASERVER": [
{
"ALIAS": "alias02",
"IP": "1.1.1.2",
"NAME": "server02"
},
{
"ALIAS": "alias03",
"IP": "1.1.1.3",
"NAME": "server03"
}
]
}
我想将 DATASERVER 中的每个对象数组转换为字符串并将其推送到关键参数。
{
"parameter": [
"{1.1.1.2,[server02,alias02],staticComment}",
"{1.1.1.3,[server03,alias03],staticComment}"
]
}
非常感谢任何支持。
好的,我自己搞定了。我认为它更复杂。
这是我的查询
.DATASERVER | map((\"{\" + .NAME + \",[\" + .IP + \",\" + .ALIAS + \"]}\") ) | {parameter: [.] }
结果
{
"parameter": [
[
"{server02,[1.1.1.2,alias02]}",
"{server03,[1.1.1.3,alias03]}"
]
]
}
生成问题的示例输出
{parameter: .DATASERVER | map("{\(.IP),[\(.NAME),\(.ALIAS)],staticComment}")}
{
"parameter": [
"{1.1.1.2,[server02,alias02],staticComment}",
"{1.1.1.3,[server03,alias03],staticComment}"
]
}
以更简单的方式从您自己的解决方案生成输出
{parameter: [.DATASERVER | map("{\(.NAME),[\(.IP),\(.ALIAS)]}")]}
{
"parameter": [
[
"{server02,[1.1.1.2,alias02]}",
"{server03,[1.1.1.3,alias03]}"
]
]
}
从给定的模板开始,您可以编写:
jq --arg parameter "{<IP>,[<NAME>,<ALIAS>],<COMMENT>}" '
[.DATASERVER[] as $l
| $parameter
| sub("<IP>"; $l.IP)
| sub("<NAME>"; $l.NAME)
| sub("<ALIAS>"; $l.ALIAS)
| sub("<COMMENT>"; $l.COMMENT // "staticComment") ]
| {parameter: .}
'