我有这样的JSON数据:
[
{
"tone_id": "anger",
"score": 0.012,
"tone_name": "Anger"
},
{
"tone_id": "disgust",
"score": 0.002,
"tone_name": "Disgust"
},
{
"tone_id": "fear",
"score": 0.14,
"tone_name": "Fear"
},
{
"tone_id": "joy",
"score": 0.42,
"tone_name": "Joy"
}
]
我想使用 jq
将其转换为以下内容:
{
"anger": 0.012,
"disgust": 0.002,
"fear": 0.14,
"joy": 0.42
}
我能做的最好的事情是:
cat result.json | jq '.[] | { (.tone_id): .score }'
给出了以下内容:
{
"anger": 0.012
}
{
"disgust": 0.002
}
{
"fear": 0.14
}
{
"joy": 0.42
}
我知道我可以使用其他方法轻松完成此操作。只是想知道是否可以使用
jq
单行?
答案 0 :(得分:6)
单一调用单行:
jq 'map( {(.tone_id): .score} ) | add'
(在传递给.[] | { (.tone_id): .score }
之前,你也可以在add
周围包括方括号 - 这两种方法是等价的。)
答案 1 :(得分:0)
您可以使用from_entries
:
jq '[.[] | {key: .tone_id, value: .score}] | from_entries' tmp.json
# or jq 'map({key: .tone_id, value: .score}) | from_entries' tmp.json
虽然在这种情况下,我没有看到任何建议通过@ peak' add
解决方案。