我正在尝试解析 JSON 并将某些值存储为 Graphite 中的指标。 为了使我的 Graphite 更加用户友好,我必须形成一个指标名称,其中包含来自其对象的一些值。 我在 bash 循环 + jq 上找到了工作解决方案,但它真的很慢。所以我寻求帮助:)
这是我的输入:
{
...
},
"Johnny Cage": {
"firstname": "Johnny",
"lastname": "Cage",
"height": 183,
"weight": 82,
"hands": 2,
"legs": 2,
...
},
...
}
期望的输出:
mk.fighter.Johnny.Cage.firstname Johnny
mk.fighter.Johnny.Cage.lastname Cage
mk.fighter.Johnny.Cage.height 183
mk.fighter.Johnny.Cage.weight 82
mk.fighter.Johnny.Cage.hands 2
mk.fighter.Johnny.Cage.legs 2
...
最佳答案
使用单个 jq
命令:
示例input.json
:
{
"Johnny Cage": {
"firstname": "Johnny",
"lastname": "Cage",
"height": 183,
"weight": 82,
"hands": 2,
"legs": 2
}
}
jq -r 'to_entries[] | (.key | sub(" "; ".")) as $name
| .value | to_entries[]
| "mk.fighter.\($name).\(.key) \(.value)"' input.json
要获取 $name
作为内部 firstname
和 lastname
键的组合,请替换 (.key | sub (""; ".")) as $name
with "\(.value.firstname).\(.value.lastname)"as $name
输出:
mk.fighter.Johnny.Cage.firstname Johnny
mk.fighter.Johnny.Cage.lastname Cage
mk.fighter.Johnny.Cage.height 183
mk.fighter.Johnny.Cage.weight 82
mk.fighter.Johnny.Cage.hands 2
mk.fighter.Johnny.Cage.legs 2
关于json - 如何创建 key :value list from JSON? key 名称应包含对象本身的一些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50029781/