json - 如何从 bash 重复调用 jq 增量生成 JSON?

标签 json bash shell jq

是否有一些公认的使用 bash 和 jq 生成 JSON 文档的“最佳实践”?我有一个脚本来收集各种数据,并更容易使用其他工具进一步处理,我想以 JSON 格式输出数据。因此,我使用 jq 来确保所有引用等都正确完成,如本答案中所建议的:https://stackoverflow.com/a/48470227/75652 。然而,我正在努力解决如何逐步生成它而不是最后一个巨大的 jq 调用。例如。类似的东西


read foo <<<$(</path/to/some/oneliner/file)
jq -n --arg f $foo '{foo: $f}'

bar=$(some_command)
jq -n --arg b $bar '{bar: $b}'

将生成两个单独的对象(可以使用支持各种或多或少非正式的“JSON流”格式的工具进行处理,包括jq),而我想要一个对象,例如


{ "foo": SOMETHING, "bar": SOMETHING_ELSE }

但我无法通过多个 jq 调用来做到这一点,因为 jq 会提示不完整的 JSON 格式错误。

为了进一步增加一些复杂性,在某些情况下我需要生成嵌套的 JSON 结构。在像 python 这样的另一种语言中,我只是将所有数据放入一组嵌套字典中,然后最后将其转储为 JSON,但 bash 中的嵌套字典似乎非常乏味..

最佳答案

您可以为下一个 jq 命令保存和处理中间 JSON:

#!/usr/bin/env bash

read -r foo <a.txt

json="$(jq -n --arg f "$foo" '{foo: $f}')"


bar="$(pwd)"
jq -n --arg b "$bar" "$json"'+{bar: $b}'

# or alternatively
jq --arg b "$bar" '.bar=$b' <<<"$json"

关于json - 如何从 bash 重复调用 jq 增量生成 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69410606/

相关文章:

shell - 从 shellscript 启动后台进程,然后再回到前台

linux - 使用 `exec 1>file` 后,如何停止将 STDOUT 重定向到文件并恢复 STDOUT 的正常操作?

android - 专门使用 GraphQl 解析 JSON 数据

java - Java中使用Gson解析Json

linux - 从 bash 脚本文件读取 csv 文件

linux - 移动文件并在 Bash 上包含它的目录后重命名它

linux - 创建一个以特定模式命名的文件

sql - Postgres : How to combine "NOT IN" and JSON "->>"?

json - Nodejs 从 http 请求 block 中读取 JSON 数据

bash - 使用 sudo 更改根目录中的文件