所以它在这里读到:
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)
我错过了什么?
谢谢
我正在构建一个脚本来一次下载所有 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。
所以我有一堆带有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)
虽然它必须在几秒钟内,而不是几毫秒
假设我有以下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层时,我需要一种方法来选择父项的字段.
有人可以帮忙吗?是否有任何"反向"的方式,回到父母身边?(不确定我是否有意义!)
我需要在解除服务时发现错误.响应可以是null一个字符串错误消息
error services-migration/foobar: Not found: services-migration/foobar
一切都很好,或有效的JSON.我想知道是否有办法jq简单地检查提供的字符串是否是有效的JSON.我可以检查字符串中的某些关键字,比如errorfe,但我正在寻找一个更强大的选项,例如.我得到一个true/false或1/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条款中结束.
说我有输入:
{
"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)
我也没有在文档中看到数组输出的选项,任何帮助表示赞赏
我使用以下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.
在上面的例子中,它在结果文件中打印双引号"".
我有一个我要过滤的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)
谢谢
我使用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)