Yog*_*ogi 2 bash json key-value jq
我有一个像这样的json
{
"outer1": {
"outer2": {
"outer3": {
"key1": "value1",
"key2": "value2"
}
},
"outer4": {
"key1": "value1",
"key2": "value2"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望输出是
[outer1.outer2.outer3]
key1 = value1
key2 = value2
[outer1.outer2.outer4]
key1 = value1
key2 = value2
Run Code Online (Sandbox Code Playgroud)
我尝试过jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' test.json但这不是我想要的
假设您的输入如下所示:
{
"outer1": {
"outer2": {
"outer3": {
"key1": "value1",
"key2": "value2"
},
"outer4": {
"key1": "value1",
"key2": "value2"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用该--stream选项将输入读取为路径值对流。例如:
jq --stream -n '
reduce (inputs | select(has(1))) as [$path, $val] ({};
.[$path[:-1] | join(".")][$path[-1]] = $val
)
'
Run Code Online (Sandbox Code Playgroud)
{
"outer1.outer2.outer3": {
"key1": "value1",
"key2": "value2"
},
"outer1.outer2.outer4": {
"key1": "value1",
"key2": "value2"
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,根据您的需要格式化此 JSON。例如,用于to_entries两个级别:
jq --stream -nr '
reduce (inputs | select(has(1))) as [$path, $val] ({};
.[$path[:-1] | join(".")][$path[-1]] = $val
)
| to_entries[] | "[\(.key)]", (
.value | to_entries[] | "\(.key) = \(.value)"
), ""
'
Run Code Online (Sandbox Code Playgroud)
[outer1.outer2.outer3]
key1 = value1
key2 = value2
[outer1.outer2.outer4]
key1 = value1
key2 = value2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |