bash里面如果定义JSON格式数据传递给命令行参数
2018-06-12 本文已影响1人
CodingCode
bash里面如果定义JSON格式数据传递给命令行参数
例如当我们用curl给REST Service发送POST请求时常常需要捎带JSON数据内容。
有一个办法,就是先定义JSON数据在一个文本文件里面,例如:
$ cat data.json
{
"aaa": "AAA",
"bbb": "BBB"
}
然后使用把文件传给curl命令:
$ curl -X POST -d @data.json http://your_rest_service_url
这样会使用到两个文件,一个数据文件,一个命令文件;很多人会觉得这样很不爽,包括我,能不能把他们放在同一个问题里面呢。
$ curl -X POST -d '{"aaa": "AAA", "bbb": "BBB"}' http://URL
这样是没有任何问题的,但是,如果JSON数据结构比较复杂,拼成一行影响阅读和修改。我们还是想保留JSON格式数据,然后放在一个文件里面,下面给出一个例子:
#!/bin/bash
JSON='{
"aaa": "AAA",
"bbb": "BBB"
}'
curl -X PUT -d "${JSON}" "http://localhost:8080/myservice/api/..."
这个例子中的JSON数据可以保持JSON格式,方便阅读和调整修改。
再一个例子,如何使用变量。
#!/bin/bash
BBB="ABCD"
JSON='{
"aaa": "AAA",
"bbb": "'${BBB}'"
}'
curl -X PUT -d "${JSON}" "http://localhost:8080/myservice/api/..."
在JSON数据里面使用了一个shell变量,达到一样的效果。