json - bash 中的转义字符(对于 JSON)

我正在使用 git,然后将提交消息和其他位作为 JSON 有效负载发布到服务器。

目前我有:

MSG=`git log -n 1 --format=oneline | grep -o ' .\+'`

将 MSG 设置为:

Calendar can't go back past today

然后

curl -i -X POST \
  -H 'Accept: application/text' \
  -H 'Content-type: application/json' \
  -d "{'payload': {'message': '$MSG'}}" \
  'https://example.com'

我真正的 JSON 有另外几个字段。

这很好用,但是当然,当我有一个提交消息(例如上面带有撇号)的提交消息时,JSON 是无效的。

如何转义 bash 中所需的字符?我不熟悉这种语言,所以不知道从哪里开始。用 \' 替换 ' 至少可以完成我怀疑的工作。

最佳答案

jq可以这样做。

轻量级、免费且用 C 编写,jq 享有广泛的社区支持,在 GitHub 上获得超过 15,000 颗星.我个人觉得它在我的日常工作流程中非常快速和有用。

将字符串转换为 JSON

$ echo -n '猫に小判' | jq -Rsa .
"\u732b\u306b\u5c0f\u5224"

解释一下,

  • -R 表示“原始输入”
  • -s 表示“包含换行符”(助记符:“slurp”)
  • -a 表示“ascii 输出”(可选)
  • . 表示“输出 JSON 文档的根”

Git + Grep 用例

要修复 OP 给出的代码示例,只需通过 jq 管道。

MSG=`git log -n 1 --format=oneline | grep -o ' .\+' | jq -Rsa .`

https://stackoverflow.com/questions/10053678/

相关文章:

c# - 判断 Json 结果是对象还是数组

java - 更新 JSONObject 中的元素

php - 从 PHP 中的 JSON POST 读取 HTTP 请求正文的问题

jquery - 如何获取 JSON 键和值?

android - 如何在Android中解析json字符串?

wcf - 在 wcf 中返回原始 json(字符串)

ios - Swift读取远程通知的userInfo

javascript - 如何从 AJAX 调用中返回一个数组?

c# - EF 4.1 - 代码优先 - JSON 循环引用序列化错误

json - 如何从 nginx 生成 JSON 日志?