json - 从 Bash 或 Ruby 创建一个有效的 JSON 字符串?

标签 json ruby linux bash

我想在 DigitalOcean 中创建 20 个液滴,并希望从 Bash 或 Ruby 中完成。 Bash 起初似乎是最简单的,但后来我发现 JSON 对引号非常挑剔,并要求 -d 参数有单引号。

所以我下面的脚本不会扩展 $line 变量 =(

问题

所以现在我在想,如果我使用 Ruby 会有帮助吗?我不会再次遇到同样的问题,只是使用另一种语言吗?

token=123

while read line; do
  curl -qq -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d '{"name":"02267-$line","region":"fra1","size":"s-2vcpu-4gb","image":"ubuntu-18-04-x64","ssh_keys":["14063864","22056139","23743266"],"backups":false,"ipv6":false,"user_data":null,"private_networking":null,"volumes": null,"tags":["02267-$line"]}' "https://api.digitalocean.com/v2/droplets"
done < list.txt

list.txt

tokyo
seoul
osaka
kobe

最佳答案

使用像 jq 这样的工具为您生成正确的 JSON。

# Note: $x here is *not* a shell variable, but a jq variable
# that jq will expand, ensuring the value is correctly quoted.
filter='{name: "02267-\($x)",
         region: "fra1",
         size: "s-2vcpu-4gb",
         image: "ubuntu-18-04-x64",
         ssh_keys ["14063864","22056139","23743266"],
         backups: false,
         ipv6: false,
         user_data: null,
         private_networking: null,
         volumes: null,
         tags: ["02267-\($x)"]
       }'

jq -n --argjson x "$line" "$filter" |
  curl -qq -X POST \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer $token" \
     -d @- \
     "https://api.digitalocean.com/v2/droplets"

关于json - 从 Bash 或 Ruby 创建一个有效的 JSON 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54023812/

相关文章:

php - 通过格式化 JSON 数组输出

json - 将数据从多个 Hive 表转换为复杂的 JSON

jquery - WCF 未反序列化 JSON - Web 服务中的参数为空

ruby-on-rails - 如何在 Gitlab CE Omnibus 中关闭机架攻击?

ruby - 在多个环境中运行 rake

linux - 读取输入而不回显不起作用(bash Shell 脚本)

linux - 在 Linux 中的同一文件中执行某些操作后需要添加换行符

asp.net - 如何让 Ajax.Net PageMethod 返回 JSON

ruby-on-rails - 提示需要散列的事件资源

python - 如何在 Linux 上安装 Python 包,以便可以通过已经运行的 PostgreSQL 13 plpython3u 扩展找到它?