添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

安装Homebrew:

 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

安装yum:

brew install yum

安装jq:

yum -y install jq
response1="{"user_system_default_download_domain":"d.maps9.com","id":"60e3f11c23389f0c62175baf","type":"ios","short":"mlvq","download_domain":"d.maps9.com","download_domain_https_ready":true,"app_user_id":"60e3cd1323389f33fd60cbcf","storage":"qiniu","form_method":"POST","cert":{"icon":{"key":"7e64106f6076751e14ef17e9dd74e40a812c4364","token":"_Vr9k9CbrqN6dKAd18Ezner7W9yR86vNze9XcT9h:26-Gu2Boy_o_tJsY2eM5CYVgybo=:eyJzY29wZSI6ImZpcmljb246N2U2NDEwNmY2MDc2NzUxZTE0ZWYxN2U5ZGQ3NGU0MGE4MTJjNDM2NCIsImNhbGxiYWNrVXJsIjoiaHR0cDovL2Zpci1hcGkuZmlyY2xpLmNuL2F1dGgvcWluaXUvY2FsbGJhY2s_cGFyZW50X2lkPTYwZTNmMTFjMjMzODlmMGM2MjE3NWJhZlx1MDAyNnRpbWVzdGFtcD0xNjY3MjczMDM0XHUwMDI2c2lnbj1jZmQyN1x1MDAyNm9yaWdpbmFsX2tleT01YWIwNjkxMjFmZjdkMDY0OGZjNjI2NzI3Y2ZkNDIxZTg0YzVjNzMyIiwiY2FsbGJhY2tCb2R5Ijoia2V5PSQoa2V5KVx1MDAyNmV0YWc9JChldGFnKVx1MDAyNmZzaXplPSQoZnNpemUpXHUwMDI2Zm5hbWU9JChmbmFtZSlcdTAwMjZvcmlnaW49JCh4Om9yaWdpbilcdTAwMjZpc19jb252ZXJ0ZWQ9JCh4OmlzX2NvbnZlcnRlZCkiLCJkZWFkbGluZSI6MTY2NzI3MzYzNCwidXBob3N0cyI6WyJodHRwOi8vdXAucWluaXUuY29tIiwiaHR0cDovL3VwbG9hZC5xaW5pdS5jb20iLCItSCB1cC5xaW5pdS5jb20gaHR0cDovLzE4My4xMzEuNy4zIl0sImdsb2JhbCI6ZmFsc2V9","upload_url":"https://upload.qbox.me","custom_headers":{},"custom_callback_data":{"original_key":"5ab069121ff7d0648fc626727cfd421e84c5c732"}},"binary":{"key":"bfe080bbf69a52d5a5da146ce17f3eda985194d6","token":"_Vr9k9CbrqN6dKAd18Ezner7W9yR86vNze9XcT9h:Bu1mVHfZk9j7FyJYUkU73hi2JLc=:eyJzY29wZSI6InByby1hcHA6YmZlMDgwYmJmNjlhNTJkNWE1ZGExNDZjZTE3ZjNlZGE5ODUxOTRkNiIsImNhbGxiYWNrVXJsIjoiaHR0cDovL2Zpci1hcGkuZmlyY2xpLmNuL2F1dGgvcWluaXUvY2FsbGJhY2s_cGFyZW50X2lkPTYwZTNmMTFjMjMzODlmMGM2MjE3NWJhZlx1MDAyNnRpbWVzdGFtcD0xNjY3MjczMDM0XHUwMDI2c2lnbj1jZmQyN1x1MDAyNnVzZXJfaWQ9NjBlM2NkMTMyMzM4OWYzM2ZkNjBjYmNmIiwiY2FsbGJhY2tCb2R5Ijoia2V5PSQoa2V5KVx1MDAyNmV0YWc9JChldGFnKVx1MDAyNmZzaXplPSQoZnNpemUpXHUwMDI2Zm5hbWU9JChmbmFtZSlcdTAwMjZvcmlnaW49JCh4Om9yaWdpbilcdTAwMjZuYW1lPSQoeDpuYW1lKVx1MDAyNmJ1aWxkPSQoeDpidWlsZClcdTAwMjZ2ZXJzaW9uPSQoeDp2ZXJzaW9uKVx1MDAyNmlzX3VzZV9tcWM9JCh4OmlzX3VzZV9tcWMpXHUwMDI2Y2hhbmdlbG9nPSQoeDpjaGFuZ2Vsb2cpXHUwMDI2cmVsZWFzZV90eXBlPSQoeDpyZWxlYXNlX3R5cGUpXHUwMDI2ZGlzdHJpYnV0aW9uX25hbWU9JCh4OmRpc3RyaWJ1dGlvbl9uYW1lKVx1MDAyNnN1cHBvcnRlZF9wbGF0Zm9ybT0kKHg6c3VwcG9ydGVkX3BsYXRmb3JtKVx1MDAyNm1pbmltdW1fb3NfdmVyc2lvbj0kKHg6bWluaW11bV9vc192ZXJzaW9uKVx1MDAyNnVpX3JlcXVpcmVkX2RldmljZV9jYXBhYmlsaXRpZXM9JCh4OnVpX3JlcXVpcmVkX2RldmljZV9jYXBhYmlsaXRpZXMpXHUwMDI2dWlfZGV2aWNlX2ZhbWlseT0kKHg6dWlfZGV2aWNlX2ZhbWlseSkiLCJkZWFkbGluZSI6MTY2NzI3NjYzNCwidXBob3N0cyI6WyJodHRwOi8vdXAucWluaXUuY29tIiwiaHR0cDovL3VwbG9hZC5xaW5pdS5jb20iLCItSCB1cC5xaW5pdS5jb20gaHR0cDovLzE4My4xMzEuNy4zIl0sImdsb2JhbCI6ZmFsc2V9","upload_url":"https://upload.qbox.me","custom_headers":{}},"mqc":{"total":5,"used":0,"is_mqc_availabled":true},"support":"qiniu","prefix":"x:"}}"
response=$(curl -X "POST" "http://api.bq04.com/apps" \
     -H "Content-Type: application/json" \
     -d "{\"type\":\"ios\", \"bundle_id\":\"com.china.NewFXeye\", \"api_token\":\"9392a78ca4489b3be9b60b5eac8dxxxx\"}")
upload_url=$(echo $response1 | jq -r .cert.binary.upload_url)
echo "打印解析的upload_url:$upload_url"

注:jq后要加-r,不然后面要使用该变量会自动加上引号

  -c               compact instead of pretty-printed output;
  -n               use `null` as the single input value;
  -e               set the exit status code based on the output;
  -s               read (slurp) all inputs into an array; apply filter to it;
  -r               output raw strings, not JSON texts;
  -R               read raw strings, not JSON texts;
  -C               colorize JSON;
  -M               monochrome (don't colorize JSON);
  -S               sort keys of objects on output;
  --tab            use tabs for indentation;
  --arg a v        set variable $a to value <v>;
  --argjson a v    set variable $a to JSON value <v>;
  --slurpfile a f  set variable $a to an array of JSON texts read from <f>;
  --rawfile a f    set variable $a to a string consisting of the contents of <f>;
  --args           remaining arguments are string arguments, not files;
  --jsonargs       remaining arguments are JSON arguments, not files;
  --               terminates argument processing;

======================================================================

以下内容为转载:

shell jq处理json字符串

1.1 工具介绍

自己用shell处理json字符串的时候,开发输入格式的不通会导致解析字符串有问题,所以这里用到了jq工具
jq 是一款命令行下处理 JSON 数据的工具。其可以接受标准输入,命令管道或者文件中的 JSON 数据,经过一系列的过滤器(filters)和表达式的转后形成我们需要的数据结构并将结果输出到标准输出中。jq 的这种特性使我们可以很容易地在 Shell 脚本中调用它。

2.1 安装jq

  • macos
brew install jq
  • linux
wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
chmod a+x jq-linux64 && mv jq-linux64 /usr/bin/jq
  • centos
yum install epel-release
yum install jq
  • ubuntu
apt update
apt install -y jq

3.1 jq表达式

3.1.1 选项

  • '-r'选项。
    该选项控制 jq 是输出 raw 格式内容或 JSON 格式内容。所谓的 JSON 格式是指符合 JSON 标准的格式。例如,假设我们要查询 JSON 字符串{"name":"tom"}中 name 的值. 使用-r 选项时返回的是'tom'. 不使用-r 选项时,返回的是'"tom"'.返回值多了一对双引号。
  • -s 选项。
    jq 可以同时处理空格分割的多个 JSON 字符串输入。默认情况下,jq 会将 filter 分别对每个 JSON 输入应用,并返回结果。使用-s 选项,jq 会将所有的 JSON 输入放入一个数组中并在这个数组上使用 filter。"-s"选项不但影响到 filter 的写法。如果在 filter 中需要对数据进行选择和映射,其还会影响最终结果。
  • --arg 选项。
    jq 通过该选项提供了和宿主脚本语言交互的能力。该选项将值(v)绑定到一个变量(a)上。在后面的 filter 中可以直接通过变量引用这个值。例如,filter '.$a'表示查询属性名称等于变量 a 的值的属性。
echo '{"name":"voidking"}' | jq .
//这样输出的不带""
echo '{"name":"voidking"}' | jq .name
//这样输出的带 ""
echo '{"name":"voidking"}' | jq -r .name

3.1.2 获取key,value

cat aaa.txt
{"redis_host": "192.168.160.38","redis_port": "6666"}
//获取所有的key,并且不带""
cat aaa.txt | jq  keys[]
//获取所有的key,并且带""
cat aaa.txt | jq -r keys[]
//获取key值为redis_host对应的value,并且带""
cat aaa.txt |jq -r .redis_host

3.1.3 串行操作

jq表达式支持串行化操作。一个复杂的表达式可以由多个简单的表达式组成,以管道符号 | 分割,串行化执行。管道前面表达式的输出,是管道后面表达式的输入。

逗号 , 表示对同一个输入应用多个表达式。

echo '{"name":{"firstname":"Void","lastname":"King"}}' | jq .name.firstname
echo '{"name":{"firstname":"Void","lastname":"King"}}' | jq '.name | .firstname'
echo '{"name":{"firstname":"Void","lastname":"King"}}' | jq '.name | .firstname,.lastname'
echo '[{"firstname":"Void","lastname":"King"},{"firstname":"Hao","lastname":"Jin"}]' | jq '.[] | .firstname,.lastname' | sed -n "N;s/\n/ /p"

获取串行json的key

$ cat test.json
  "a": "aa",
  "b": "bb",
  "c": {
      "dd": "ddd",
      "ee": "eee"
//获取根级别的keys:
$ jq -r keys[] test.json 
获取下层成员的keys:
$ jq .c test.json | jq -r keys[]

3.1.4 数组操作

echo '[{"name":"voidking"},{"name":"haojin"}]' | jq .
echo '[{"name":"voidking"},{"name":"haojin"}]' | jq '.[]'
echo '[{"name":"voidking"},{"name":"haojin"}]' | jq '.[0:2]'
echo '[{"name":"voidking"},{"name":"haojin"}]' | jq '.[0,1]'
echo '[{"name":"voidking"},{"name":"haojin"}]' | jq '.[].name'
echo '[{"name":"voidking"},{"name":"haojin"}]' | jq '.[] | .name'
echo '[{"name":"voidking"},{"name":"haojin"}]' | jq '.[] | .["name"]'

3.1.5 jq运算

echo '{"num":3,"str":"343"}' | jq '.num*3'
echo '{"num":3,"str":"343"}' | jq '.num/3'
echo '{"num":3,"str":"343"}' | jq '.str+"3"'
echo '{"num":3,"str":"343"}' | jq '.str*3'
echo '{"num":3,"str":"343"}' | jq '.str/"4"'
echo '[{"name":"voidking"},{"name":"haojin"}]' | jq '.+[{"name":"voidking"}]'
echo '[{"name":"voidking"},{"name":"haojin"}]' | jq '.-[{"name":"voidking"}]'
echo '{"name":{"firstname":"Void","lastname":"King"}}' | jq '.+{"name":{"nickname":"Hankin"}}'
echo '{"name":{"firstname":"Void","lastname":"King"}}' | jq '.*{"name":{"nickname":"Hankin"}}'
echo '{"name":{"firstname":"Void","lastname":"King"}}' | jq '.name.nickname//"Hankin"'
jq -n '([1,2]|.[])+([4,6]|.[])'

3.1.6 删除

echo '{"name":{"firstname":"Void","lastname":"King"}}' | jq 'del(.name.firstname)'

3.1.7 映射

在数据处理过程中,我们经常需要将数据从一种形式转换成另外一种形式,或者改变数据的值。
jq提供了两个内置映射函数来实现这种转换:map 和 map_values。其中,map处理的对象是数组,而map_values则处理对象属性的值。map 函数的参数为 filter 表达式。

echo '[1,2,3,4]'| jq -r 'map(.+1)'

3.1.8 过滤

echo '[1,2,3,4]'| jq -r 'map(select(.>2))'
echo '[1,2,3,4]'| jq -r '.[]|select(.>2)'
echo '[{"name":"voidking","age": 18},{"name":"haojin","age": 28}]' | jq '.[]|select(.name=="haojin")'

3.1.9 数组函数

jq 提供内置函数用于完成数组的扁平化(flatten),反序(reverse),排序(sort、sort_by),比较(min、min_by、max、max_by)和查找(indices、index、rindex)。其中indices函数的输入数据可以是数组,也可以是字符串。和 index函数不同的是,其结果是一个包含所有参数在输入数据中位置的数组。

jq -nr '[1,[2,3],4]|flatten'
jq -nr '[1,2,3]|reverse'
jq -nr '[3,1,2]|sort'
jq -nr '[{"a":1},{"a":2}]|sort_by(.a)'
jq -nr '"abcb"|indices("b")'
jq -nr '[1,3,2,3]|indices(3)'

3.1.10 路径

jq中的path是指从根到某个叶子属性的访问路径。
在jq中有两种表示路径的方式:数组表示法和属性表示法。
属性表示法类似于我们在filter中访问某个属性值的方式,如.a.b。
数组表示法是将路径中的每一部分表示为数组的一个元素。
jq提供了一个内置函数path用来实现路径从属性表示法到数组表示法的转换。

jq还提供了函数用来读取路径的值(getpath), 设置路径的值(setpath)和删除路径(del)。
不过这三个函数对路径的处理并不一致。其中getpath和setpath只接受数组表示法的路径,而del函数只能正确处理属性表示法的路径。

jq还提供了一个函数paths用来枚举可能存在的路径。在没有参数的情况下,paths函数将输出JSON数据中所有可能的路径。paths函数可以接受一个过滤器,来只输出满足条件的路径。

jq中提供了一系列的函数用来判断某个元素或者属性是否存在于输入数据中。其中函数has和in用来判断JSON对象或数组是否包含特定的属性或索引。函数contains和inside用来判断参数是否完全包含在输入数据中。对于不同的数据类型,判断是否完全包含的规则不同。对于字符串,如果A是B的子字符串,则认为A完全包含于B。对于对象类型,如果对象A的所有属性在对象B中都能找到且值相同,则认为A完全包含于B。

因为最近要处理一些 JSON 数据格式,所以在经过一番搜索后 最终找到了 jq 这个很棒的工具。jq 允许你直接在命令行下对 JSON 进行操作,包括分片、过滤、转换等等。 让我们通过几个例子来说明 jq 的功能: 一、输出格式化,漂亮的打印效果 如果我们用文本编辑器打开 JSON,有时候可能看起来会一团糟,但是通过 jq 的 .(点)过滤器就可以立马让 JSON 的格式规整起来。 1.用文本编辑器打开后的样子 2.用 jq 显示的结果 代码如下:% jq . soundtag.json 二、快速查询JSON数据 利用 jq 能够以 key 作为关键字来对 JSON 作出快速查询, 例如:
Linux Shell操作json工具jq背景使用方式 随着后台项目的开发,json协议的可视性好,组装与解封装的工具在各个平台都比较完备,所以能通过shell快速组装与解封装json能大大的提高开发效率; 使用方式 ## 最快捷的json漂亮格式化的语句 echo '{"name":"cm", "age":"18"}' | jq . ## 获取字段name的内容 echo '{"name":"cm", "age":"18"}' | jq .name ## 获取字段name的内容并组装新的json
$(function() { //jq遍历json/数组 var json =[{code:"101",val:"1111"},{code:"102",val:"2222"},{code:"103",val:"3333"}]; $.each(json,function(index,j) { console.log(j.code+
shell嵌套python脚本 echo '[{"id":1,"name":"yu"},{"id":2,"name":"su"}]' | python3 -c "import sys, json; [print(a['id']) for a in json.load(sys.stdin) ];" 使用grep echo '[{"id":1,"name":"yu"},{"i
jq是一款命令行下处理JSON数据的工具,可以通过一系列的过滤器和表达式来转换JSON数据并输出需要的结果。安装jq可以使用不同的方法,例如在macOS上使用brew install jq,Linux上使用wget命令下载jq,并设置可执行权限后移动到/usr/bin目录,CentOS上使用yum install jq,Ubuntu上使用apt命令安装jq。 在使用jq解析JSON字符串时,可以使用不同的表达式来获取想要的数据。例如,要获取根级别的key,可以使用jq -r keys[]命令,要获取下层成员的key,可以先使用jq .c命令获取"c"字段的内容,然后再使用jq -r keys[]命令来获取下层成员的key。 参考引用: :自己用shell处理json字符串的时候,开发输入格式的不通会导致解析字符串有问题,所以这里用到了jq工具 jq 是一款命令行下处理 JSON 数据的工具。其可以接受标准输入,命令管道或者文件中的 JSON 数据,经过一系列的过滤器(filters)和表达式的转后形成我们需要的数据结构并将结果输出到标准输出中。jq 的这种特性使我们可以很容易地在 Shell 脚本中调用它。 :获取串行json的key $ cat test.json { "a": "aa", "b": "bb", "c": { "dd": "ddd", "ee": "eee" } } //获取根级别的keys: $ jq -r keys[] test.json a b c 获取下层成员的keys: $ jq .c test.json | jq -r keys[] dd ee :因为最近要处理一些 JSON 数据格式,所以在经过一番搜索后 最终找到了 jq 这个很棒的工具。jq 允许你直接在命令行下对 JSON 进行操作,包括分片、过滤、转换等等。 让我们通过几个例子来说明 jq 的功能: 一、输出... AndroidStudio报错:Failed to resolve: com.github.CymChad:BaseRecyclerViewAdapterHelper: linfeidie: 谢谢你 解决问题了 AndroidStudio报错:Failed to resolve: com.github.CymChad:BaseRecyclerViewAdapterHelper: _4444y_: 厉害了兄弟!!!感谢!!!! “Navicat Premium”已损坏,无法打开, 您应该将它移到废纸篓的解决办法 CodeCat程序喵: 完美解决;我的系统是:MosOs Monterey 12.2.1 Shell脚本使用jq解析json qq_53651126: 博主,问一下3.1.4里有什么方法能得到数组的长度吗