json - 与 JQ 的值(value)图

标签 json jq

我有一个很大的 JSON 文件,我想在其中基于某种映射来转换一些值。

我拥有的数据如下所示:

[
    {"id":1, "value":"yes"},
    {"id":2, "value":"no"},
    {"id":3, "value":"maybe"}
]

我想将其转换为这样的列表:

[
    {"id":1, "value":"10"},
    {"id":2, "value":"0"},
    {"id":3, "value":"5"}
]

使用固定映射:

yes => 10
no => 0
maybe => 5

我当前的解决方案基于一个简单的 if-elif-else 组合,如下所示:

cat data.json| jq '.data[] | .value = (if .value == "yes" then "10" elif .value == "maybe" then "5"  else "0" end)'

但这真的很难看,我希望有一种更直接的方式来表达映射。

感谢您的帮助

最佳答案

如果想避免在命令行上指定映射,那么以下两种变体可能会令人感兴趣。

第一个变体可与 jq 1.3、jq 1.4 和 jq 1.5 一起使用:

def mapping: {"yes":"10","no":"0","maybe":"5"};
map(.value |=  mapping[.])

下一个变体使用 --argfile 选项(自 jq 1.4 起可用),如果映射对象在文件中可用,则下一个变体会很有趣:

jq --argfile mapping mapping.jq 'map(.value |= $mapping[.])' data.json

最后,在 jq 1.5 中,还可以使用基于导入的其他替代方案(!)。

关于json - 与 JQ 的值(value)图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31887253/

相关文章:

python - 如何在 Python 中检查字符串是否是有效的 JSON?

javascript - 开 Jest 比较对象。字符串

json - 在 Bash 循环中检测分页 cURL 响应的最后一页

json - 从不寻常的 JSON 中提取数据

json - 如何使用 jq 从两个日期/时间值计算持续时间

json - 将 ps aux 转换为 json

javascript - 定义 "cyclic data structures"

android - 我无法在我的 Android 应用程序中从 mysql 检索数据

php - JSON.stringify() 对于序列化 JSON 对象是否可靠?

json - 用 jq 解析嵌套的 json