json tool, jq command, json 格式化

install

1
apt install jq

https://stedolan.github.io/jq/

https://stedolan.github.io/jq/download/

1
2
3
jq ".[0]|.releases| .[0]|.downloads.linux.link"
cat foo.txt|jq '.checklists|.[0]|.checkItems|.[].name'
cat foo.txt|jq '.checklists|.[0]|.checkItems|.[]|if .state == "incomplete" then .name else "" end'|grep -v '""'

jq 可以对 json 数据进行分片、过滤、映射和转换

jq 是用 C 编写,没有运行时依赖,所以几乎可以运行在任何系统上。预编译的二进制文件可以直接在Linux、OS X和windows系统上运行,当然在linux和OS X系统你需要赋与其可执行权限;在linux系统中也可以直接用yum安装。 下载页面:

.

最简单的表达式 .,格式化输出

[index]

输出列表中的第一个元素,可以使用[0]

cat json.txt | jq ‘.[0]’

管道符 |

cat json.txt | jq ‘.[0] | .name '

json格式化

1
2
3
4
5
6
7
8
echo '{"kind": "Service", "apiVersion": "v1", "status": {"loadBalancer": true}}' | jq .
{
  "kind": "Service",
  "apiVersion": "v1",
  "status": {
    "loadBalancer": true
  }
}

jq 生成 json 字符串

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
BUCKET_NAME=testbucket
OBJECT_NAME=testworkflow-2.0.1.jar
TARGET_LOCATION=/opt/test/testworkflow-2.0.1.jar

JSON_STRING=$(jq -n \
                  --arg bucketname "$BUCKET_NAME" \
                  --arg objectname "$OBJECT_NAME" \
                  --arg targetlocation "$TARGET_LOCATION" \
                   '$ARGS.named')

jq -n \
--arg foo "bar" \
--arg bar "foo" \
  '$ARGS.named'
  • –null-input | -n, 禁止 jq 读取输入, 在用 jq 生成 json 字符串时需要用这个选项把输入置空.
  • –arg name value, 定义变量
  • Named arguments are also available to the jq program as $ARGS.named.

https://stackoverflow.com/questions/48470049/build-a-json-string-with-bash-variables

作者: 网易云 链接: https://www.zhihu.com/question/20057446/answer/489588448 来源: 知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

作者:软件测试技能栈 链接:https://www.jianshu.com/p/6de3cfdbdb0e 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

https://www.jianshu.com/p/6de3cfdbdb0e

https://justcode.ikeepstudying.com/2018/02/shell%EF%BC%9A%E6%97%A0%E6%AF%94%E5%BC%BA%E5%A4%A7%E7%9A%84shell%E4%B9%8Bjson%E8%A7%A3%E6%9E%90%E5%B7%A5%E5%85%B7jq-linux%E5%91%BD%E4%BB%A4%E8%A1%8C%E8%A7%A3%E6%9E%90json-jq%E8%A7%A3%E6%9E%90-json/