标签: jq

如何使用jq基于内部数组中的值过滤对象数组?

鉴于此输入:

[
  {
    "Id": "cb94e7a42732b598ad18a8f27454a886c1aa8bbba6167646d8f064cd86191e2b",
    "Names": [
      "condescending_jones",
      "loving_hoover"
    ]
  },
  {
    "Id": "186db739b7509eb0114a09e14bcd16bf637019860d23c4fc20e98cbe068b55aa",
    "Names": [
      "foo_data"
    ]
  },
  {
    "Id": "a4b7e6f5752d8dcb906a5901f7ab82e403b9dff4eaaeebea767a04bac4aada19",
    "Names": [
      "jovial_wozniak"
    ]
  },
  {
    "Id": "76b71c496556912012c20dc3cbd37a54a1f05bffad3d5e92466900a003fbb623",
    "Names": [
      "bar_data"
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用jq构造一个过滤器,该过滤器返回内部数组中包含"data"的所有Ids 对象,输出为换行符.对于上面的数据,我想要的输出是Names

cb94e7a42732b598ad18a8f27454a886c1aa8bbba6167646d8f064cd86191e2b
a4b7e6f5752d8dcb906a5901f7ab82e403b9dff4eaaeebea767a04bac4aada19
Run Code Online (Sandbox Code Playgroud)

我想我跟这个有点接近:

(. - select(.Names[] contains("data"))) | .[] .Id
Run Code Online (Sandbox Code Playgroud)

select过滤器不正确,它不编译(get error: syntax error, unexpected IDENT).

arrays select json negation jq

209
推荐指数
3
解决办法
17万
查看次数

使用jq基于对象中变量的值选择对象

我有以下json文件:

{
    "FOO": {
        "name": "Donald",
        "location": "Stockholm"
    },
    "BAR": {
        "name": "Walt",
        "location": "Stockholm"
    },
    "BAZ": {
        "name": "Jack",
        "location": "Whereever"
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用jq并希望得到'location'为'Stockholm'的对象的"名称"元素.

我知道我可以得到所有的名字

cat json | jq .[] | jq ."name"
"Jack"
"Walt"
"Donald"
Run Code Online (Sandbox Code Playgroud)

但考虑到子键的值(这里"location" : "Stockholm"),我无法弄清楚如何只打印某些对象.

bash json jq

202
推荐指数
4
解决办法
18万
查看次数

使用jq串行解析和显示json中的多个字段

我有这个Json

{
    "users": [
        {
            "first": "Stevie",
            "last": "Wonder"
        },
        {
            "first": "Michael",
            "last": "Jackson"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

使用jq我想连续显示名字和姓氏.像这样 -

Stevie Wonder
Michael Jackson
Run Code Online (Sandbox Code Playgroud)

这是我走了多远 -

jq '.users[].first, .users[].last'
Run Code Online (Sandbox Code Playgroud)

但它显示出来

"Stevie"
"Michael"
"Wonder"
"Jackson"
Run Code Online (Sandbox Code Playgroud)

请注意以下事项 -

  1. 我不想要的双引号.
  2. 我不想要的回车.
  3. 它混乱了.我的查询首先显示所有名字,然后显示所有姓氏.但是,我想要第一个,最后一对.

json jq

188
推荐指数
8
解决办法
14万
查看次数

如何在shell管道中使用`jq`?

我似乎无法jq在shell管道中"正常"行事.例如:

$ curl -s https://api.github.com/users/octocat/repos | jq | cat
Run Code Online (Sandbox Code Playgroud)

结果在jq简单的打印出它的帮助文本*.如果我尝试将jq输出重定向到文件,会发生同样的事情:

$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json
Run Code Online (Sandbox Code Playgroud)

jq如果它确定它不是从tty运行的话,是故意拯救?如何防止此行为以便我可以jq在管道中使用?


*(我意识到这个例子包含了无用用途 ;它仅用于说明目的)

shell pipe jq

185
推荐指数
2
解决办法
7万
查看次数

如何使用命令行计算JSON对象中的项?

JSONcurl命令得到这种回复:

[
  {
    "cid": 49,
    "pyn": "yi4",
    "hans": "?",
    "hant": "?",
    "tid": 68,
    "l10n": "cent million",
    "pid": 1,
    "pos": "num",
    "pos_txt": ""
  },
  {
    "cid": 50,
    "pyn": "yi4",
    "hans": "?",
    "hant": "?",
    "tid": 69,
    "l10n": "100 millions",
    "pid": 1,
    "pos": "num",
    "pos_txt": ""
  }
]
Run Code Online (Sandbox Code Playgroud)

如何2使用Bash或命令行(例如underscore)计算数组中的项目数(此处)?

bash json curl jq

157
推荐指数
6
解决办法
10万
查看次数

如何使用jq合并2 json文件?

我在shell脚本中使用jq工具(jq-json-processor)来解析json.

我有2个json文件,想要将它们合并为一个唯一的文件

这里是文件的内容:

文件1

{
    "value1": 200,
    "timestamp": 1382461861,
    "value": {
        "aaa": {
            "value1": "v1",
            "value2": "v2"
        },
        "bbb": {
            "value1": "v1",
            "value2": "v2"
        },
        "ccc": {
            "value1": "v1",
            "value2": "v2"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

文件2

{
    "status": 200,
    "timestamp": 1382461861,
    "value": {
        "aaa": {
            "value3": "v3",
            "value4": 4
        },
        "bbb": {
            "value3": "v3"
        },      
        "ddd": {
            "value3": "v3",
            "value4": 4
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

预期结果

{
    "value": {
        "aaa": {
            "value1": "v1",
            "value2": "v2",
            "value3": "v3",
            "value4": 4 …
Run Code Online (Sandbox Code Playgroud)

shell command-line json jq

106
推荐指数
8
解决办法
6万
查看次数

如何使用jq从JSON获取密钥名称

curl http://testhost.test.com:8080/application/app/version | jq '.version' | jq '.[]'

上面的命令只输出如下值:

"madireddy@test.com"

"2323"

"test"

"02-03-2014-13:41"

"application"
Run Code Online (Sandbox Code Playgroud)

如何获得密钥名称,如下所示:

email

versionID

context

date

versionName
Run Code Online (Sandbox Code Playgroud)

unix shell json key jq

103
推荐指数
8
解决办法
7万
查看次数

如何删除jq输出中的双引号以解析bash中的json文件?

我使用JQ解析一个JSON文件,如这里.但是,字符串值的结果包含预期的"双引号",如下所示:

$ cat json.txt | jq '.name'
"Google"
Run Code Online (Sandbox Code Playgroud)

如何将此管道传输到另一个命令以删除""?所以我明白了

$ cat json.txt | jq '.name' | some_other_command
Google
Run Code Online (Sandbox Code Playgroud)

some_other_command可以用什么?

bash awk sed jq

99
推荐指数
2
解决办法
4万
查看次数

如何使用jq将任意简单JSON转换为CSV?

使用jq,如何将浅层对象数组的任意JSON编码转换为CSV?

这个网站上有大量的问答,涵盖了对字段进行硬编码的特定数据模型,但是这个问题的答案应该适用于任何JSON,唯一的限制是它是一个具有标量属性的对象数组(没有深/复/子对象,扁平化这些是另一个问题).结果应包含一个标题行,给出字段名称.将优先考虑保留第一个对象的字段顺序的答案,但这不是必需的.结果可以用双引号括起所有单元格,或者只包含那些需要引用的单元格(例如'a,b').

例子

  1. 输入:

    [
        {"code": "NSW", "name": "New South Wales", "level":"state", "country": "AU"},
        {"code": "AB", "name": "Alberta", "level":"province", "country": "CA"},
        {"code": "ABD", "name": "Aberdeenshire", "level":"council area", "country": "GB"},
        {"code": "AK", "name": "Alaska", "level":"state", "country": "US"}
    ]
    
    Run Code Online (Sandbox Code Playgroud)

    可能的输出:

    code,name,level,country
    NSW,New South Wales,state,AU
    AB,Alberta,province,CA
    ABD,Aberdeenshire,council area,GB
    AK,Alaska,state,US
    
    Run Code Online (Sandbox Code Playgroud)

    可能的输出:

    "code","name","level","country"
    "NSW","New South Wales","state","AU"
    "AB","Alberta","province","CA"
    "ABD","Aberdeenshire","council area","GB"
    "AK","Alaska","state","US"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 输入:

    [
        {"name": "bang", "value": "!", "level": 0},
        {"name": "letters", "value": "a,b,c", "level": 0},
        {"name": "letters", "value": "x,y,z", "level": 1},
        {"name": "bang", "value": …
    Run Code Online (Sandbox Code Playgroud)

csv json jq

84
推荐指数
6
解决办法
5万
查看次数

JQ:选择多个条件

我有一个json,目前使用select来获取只匹配一个条件的数据,我需要根据更多条件进行过滤.

例如:

.[] | select((.processedBarsVolume <= 5) && .processedBars > 0)
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

json jq

80
推荐指数
2
解决办法
4万
查看次数

标签 统计

jq ×10

json ×8

bash ×3

shell ×3

arrays ×1

awk ×1

command-line ×1

csv ×1

curl ×1

key ×1

negation ×1

pipe ×1

sed ×1

select ×1

unix ×1