标签: jq

在Ubuntu上将jq升级到1.5

所以它在这里读到:

jq 1.5是官方的Debian和Ubuntu存储库.使用sudo apt-get install jq安装.

然而:

$ sudo apt-get install jq
Reading package lists... Done
Building dependency tree       
Reading state information... Done
jq is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Run Code Online (Sandbox Code Playgroud)

和:

$ jq --version
jq version 1.3

Description:    Ubuntu 14.04 LTS
Release:    14.04
Codename:   trusty
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

谢谢

ubuntu json upgrade jq

24
推荐指数
1
解决办法
8217
查看次数

如何使用 jq 迭代 JSON 数组?

我正在构建一个脚本来一次下载所有 CodeCommit 存储库。

REPOS=$(aws codecommit list-repositories)

echo $REPOS | jq -r '.[]' | while read name ; do
    git clone XXX
done
Run Code Online (Sandbox Code Playgroud)

在第一行中,我得到所有存储库 JSON,如下所示:

[
  {
    "repositoryName": "repo_a",
    "repositoryId": "XXXXXX"
  },
  {
    "repositoryName": "repo_b",
    "repositoryId": "XXXXXX"
  },
  {
    "repositoryName": "repo_c",
    "repositoryId": "XXXXXX"
  },
  {
    "repositoryName": "repo_d",
    "repositoryId": "XXXXXX"
  }
]

Run Code Online (Sandbox Code Playgroud)

我需要简单地迭代此 json,以获取属性repositoryName 并为每个存储库执行 git clone。

但在这个例子中,该命令jq -r '.[]'不起作用......这会在每次重复时返回整个 json。

bash json jq

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

jq日期和unix时间戳

所以我有一堆带有unix时间戳值的数据(以毫秒为单位).像这样的东西:

{
    "id": "f6922fd5-4f97-4113-820e-b45eba0ae236",
    "published_at": 1461624333859,
    "tracking_id": "a85d5ed5-5efa-461b-aae0-beb2098c0ff7",
}, {
    "id": "835d412f-5162-440c-937b-7276f22c4eb9",
    "published_at": 1461625249934,
    "tracking_id": "86472ba2-ce5f-400f-b42a-5a0ac155c42c",
}, {
    "id": "bc2efcac-67a0-4855-856a-f31ce5e4618e",
    "published_at": 1461625253393,
    "tracking_id": "c005398f-07f8-4a37-b96d-9ab019d586c2",
}
Run Code Online (Sandbox Code Playgroud)

而且我们经常需要在特定日期内搜索行.是否可以使用jq查询,提供人类可读日期,例如2016-04-25.另外我想知道是否可能采用其他方式,使jq published_at以人类可读的形式显示值?

例如,这有效:

$ echo 1461624333 | jq 'todate'   
"2016-04-25T22:45:33Z"
Run Code Online (Sandbox Code Playgroud)

虽然它必须在几秒钟内,而不是几毫秒

unix json jq

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

jq - 当我已经深入到对象的子项中时,如何打印对象的父值?

假设我有以下JSON,存储在我的变量jsonVariable中.

{
    "id": 1,
    "details": {
        "username": "jamesbrown",
        "name": "James Brown"
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用以下代码使用jq解析此JSON:

echo $jsonVariable | jq '.details.name | select(.name == "James Brown")'
Run Code Online (Sandbox Code Playgroud)

这会给我输出

詹姆斯布朗

但是如果我想得到这个人的身份怎么办?现在,我知道这是一个粗略而简单的例子 - 我正在使用的程序是5或6级深度,除了select之外还有许多不同的JQ函数.在执行各种过滤方法后,当我已经深入5或6层时,我需要一种方法来选择父项的字段.

有人可以帮忙吗?是否有任何"反向"的方式,回到父母身边?(不确定我是否有意义!)

json jq

23
推荐指数
1
解决办法
1万
查看次数

检查string是否是带有jq的有效JSON

我需要在解除服务时发现错误.响应可以是null一个字符串错误消息

error services-migration/foobar: Not found: services-migration/foobar

一切都很好,或有效的JSON.我想知道是否有办法jq简单地检查提供的字符串是否是有效的JSON.我可以检查字符串中的某些关键字,比如errorfe,但我正在寻找一个更强大的选项,例如.我得到一个true/false1/0从jq.我正在查看jq有关SO 的文档和一些问题但是所有内容都是关于从JSON中查找和选择键值,但没有关于简单地验证字符串的内容.

更新:

我有这个:

 result=$(some command)
Run Code Online (Sandbox Code Playgroud)

结果是字符串 error services-migration/foobar: Not found: services-migration/foobar

然后if语句:

 if jq -e . >/dev/null 2>&1 <<<"$result"; then
    echo "it catches it"
 else
    echo "it doesn't catch it"
 fi
Run Code Online (Sandbox Code Playgroud)

它总是在else条款中结束.

bash json jq

23
推荐指数
3
解决办法
2万
查看次数

jq:json对象的输出数组

说我有输入:

{
    "name": "John",
    "email": "john@company.com"
}
{
    "name": "Brad",
    "email": "brad@company.com"
}
Run Code Online (Sandbox Code Playgroud)

我如何获得输出:

[
    {
        "name": "John",
        "email": "john@company.com"
    },
    {
        "name": "Brad",
        "email": "brad@company.com"
    }
]
Run Code Online (Sandbox Code Playgroud)

我试过两个:

jq '[. | {name, email}]'
Run Code Online (Sandbox Code Playgroud)

jq '. | [{name, email}]'
Run Code Online (Sandbox Code Playgroud)

这两个都给了我输出

[
    {
        "name": "John",
        "email": "john@company.com"
    }
]
[
    {
        "name": "Brad",
        "email": "brad@company.com"
    }
]
Run Code Online (Sandbox Code Playgroud)

我也没有在文档中看到数组输出的选项,任何帮助表示赞赏

bash jq

22
推荐指数
1
解决办法
2万
查看次数

如何使用 JMESPath 使用不区分大小写的正则表达式进行搜索

我需要使用一些使用 JMESPath 来搜索 JSON 的系统。如何搜索具有模式的字符串(像这样)。如何在不区分大小写模式下使用正则表达式执行此操作?

PS:不知道为什么AWS S3 CLI和Ansible使用JMESPath而不是jq来查询JSON。它似乎缺少这些功能,并且自 2017 年以来添加 split 功能的提案已被冻结(就像thisthis)。这些功能jq都可以使用。JMESPath 有何优势使其具有吸引力?

json jq jmespath

22
推荐指数
1
解决办法
6416
查看次数

如果没有其他JSON JQ

我使用以下JQ命令来过滤掉JSON.我的要求是在预期节点存在时过滤掉JSON消息.否则,什么都不做.因此,我使用if,elif,....

sed -n "s/.*Service - //p" $1/response.log* |
  jq "if (.requests | length) != 0 then .requests |= map(select(.id == \"123\"))
      elif (.result | length ) != 0  then .result |= map(select(.id== \"123\")) 
      else " "  end" > ~/result.log
Run Code Online (Sandbox Code Playgroud)

看起来在这里是必须的.我不想在else块中做任何事情.无论如何,我可以忽略其他或只是在其他地方打印一些whitespce.

在上面的例子中,它在结果文件中打印双引号"".

json if-statement jq

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

jq - 如何过滤不包含的json

我有一个我要过滤的aws查询jq.我想过滤所有imageTags以"最新"结束

到目前为止,我做了这个,但它过滤包含"最新"的东西,而我想过滤不包含"最新"的东西(或不以"最新"结尾)

aws ecr describe-images --repository-name <repo> --output json | jq '.[]' | jq '.[]' | jq "select ((.imagePushedAt < 14893094695) and (.imageTags[] | contains(\"latest\")))"
Run Code Online (Sandbox Code Playgroud)

谢谢

json jq

21
推荐指数
4
解决办法
1万
查看次数

如何使用jq将字符串转换为JSON文件中的整数?

我使用jq将复杂的json对象转换为更小的对象.我的查询是:

jq 'to_entries[]| {companyId: (.key), companyTitle: (.value.title), companyCode: (.value.booking_service_code)}' companies.json
Run Code Online (Sandbox Code Playgroud)

现在,它(.key)被解析为一个字符串,但我想companyId成为一个数字.

我的结果目前看起来像这样:

{
  "companyId": "1337",
  "companyTitle": "Some company title",
  "companyCode": "oxo"
}
Run Code Online (Sandbox Code Playgroud)

但应该是这样的:

{
  "companyId": 1337,
  "companyTitle": "Some company title",
  "companyCode": "oxo"
}
Run Code Online (Sandbox Code Playgroud)

json casting jq

20
推荐指数
2
解决办法
8861
查看次数

标签 统计

jq ×10

json ×9

bash ×3

casting ×1

if-statement ×1

jmespath ×1

ubuntu ×1

unix ×1

upgrade ×1