我正在尝试解析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
...
答案 0 :(得分: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
替换为"\(.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