json - jq 按键递归搜索值,以
问题描述
TL;博士
以下命令中的jq等价于什么;grep '"\/v6'
jq '.. .pattern? // empty' /tmp/all.json | grep '"\/v6'
考虑以下json;
{
"payload": {
"groups": [
{
"pattern": "/v6/",
"groups": [
{
"pattern": "something/",
"groups": [
{
"pattern": "somethingElse/",
"groups": [
{
"pattern": "{specialPattern:[0-9]+}/",
"groups": [],
"routes": [
{
"type": "variable",
"pattern": "/v6/notImportant/{specialPattern:[0-9]+}/",
"methods": {
json文件很大,有很多不相关的数据
我正在尝试捕获.pattern
json 文件中的所有内容,基于这个问题,我创建了以下 jq 命令:
jq '.. .pattern? // empty' /tmp/all.json
这按预期工作,创建与此类似的输出;
"/v6/"
"something/"
"somethingElse/"
"{specialPattern:[0-9]+}/"
"/v6/notImportant/{specialPattern:[0-9]+}/"
问题:我如何只选择.pattern
以 开头的每个/v6/
?我像这样使用过grep
jq '.. .pattern? // empty' /tmp/all.json | grep '"\/v6'
但是,必须有一个jq
-only 解决方案。
谷歌教了我关于 jq 的知识contains
,这似乎是某种相关问题的答案;
不幸的是,我无法使其适用于我的情况,因为select
似乎没有必要使用。
解决方案
要执行选择,您可以使用
select( test( "^/v6/" ) )
所以命令变成了;
jq '.. .pattern? // empty | select(test("^/v6/"))' /tmp/all.json
或与startswith
.
推荐阅读
- java - 在 Java 17 上运行 Eclipse 时出错
- sql - 选择包含一组值的所有行
- powerbi - 需要在 Power BI 中使用 DAX 根据日期查找新行
- ansible - 如何杀死ansible中的异步进程?
- quarkus-panache - 如何按特定字段过滤 PanacheQuery?
- javascript - Prestashop - 当有产品定制字段时显示警告
- python - 如何使用 Peewee Flask 创建页面分页?
- javascript - 如何在我的网站 loadinf 屏幕中添加 .gif
- java - Spring接口驱动控制器的使用
- python - 如何在python的文件处理中保存迭代输入