小编pea*_*eak的帖子

将 jq 查询的结果聚合到单个数组中

我有一个包含独立 JSON 对象(即不是数组)的输入文件,我想从每个对象中过滤一些字段并使用结果元素创建一个数组。它基本上是 JSON 格式的日志语句列表。

我正在使用jq这个,它工作得很好,除了我无法将所有结果对象聚合到一个数组中。

输入是这样的:

{"name":"myname", "environment":"staging", "email":"email1@example.com", "time":"2017-04-02T05:00:00.046Z"}
{"name":"myname", "environment":"staging", "email":"email2@example.com", "time":"2017-02-02T05:00:00.046Z"}
...
{"name":"myname", "environment":"staging", "email":"email3@example.com", "time":"2017-10-02T05:00:00.046Z"}
{"name":"myothername", "environment":"staging", "time":"2017-10-02T05:00:00.046Z"}
Run Code Online (Sandbox Code Playgroud)

(注意最后一个条目没有email字段,因此null如果不过滤,它将返回一个值)

从这个对象列表中,我只想获取字段emailtime,并忽略其余字段,因此我使用了以下jq查询:

jq '{email: (.email | values), time: (.time | values)}' input.json

请注意,我使用values过滤器是因为日志消息是混合的,因此并非所有 json 对象都有该email字段,因此我忽略这些字段。

我现在的问题是,即使我得到了想要的结果,我又得到了一个列表,并且我想要一个数组。

即我得到类似的东西

{"email":"email1@example.com", "time":"2017-04-02T05:00:00.046Z"}
{"email":"email2@example.com", "time":"2017-02-02T05:00:00.046Z"}
...
{"email":"email3@example.com", "time":"2017-10-02T05:00:00.046Z"}
Run Code Online (Sandbox Code Playgroud)

我想要这样:

[
    {"email":"email1@example.com", "time":"2017-04-02T05:00:00.046Z"},
    {"email":"email2@example.com", "time":"2017-02-02T05:00:00.046Z"},
    ...,
    {"email":"email3@example.com", "time":"2017-10-02T05:00:00.046Z"}
]
Run Code Online (Sandbox Code Playgroud)

我尝试了几种不同的方法,但通常都会出现错误Cannot index array with string "email" …

json jq

12
推荐指数
1
解决办法
6803
查看次数

Android:将OpenGL效果应用于相机

Android中是否有任何方法可以使用GLSurfaceView显示相机预览,同时在该表面上使用OpenGL效果?特别是加成混合效果.我知道OpenGL可以使用这些效果,我知道相机可以放在SurfaceView上,但是可以将相机放在GLSurfaceView中并将OpenGL混合效果应用于相机预览吗?

camera android opengl-es color-blending glsurfaceview

11
推荐指数
1
解决办法
4519
查看次数

JQ:排除指定的嵌入密钥

从以下输入:

{
    "key1": {
        "key_x": "1",
        ...
        "key_z": "2"
    },
    "key2": {
        "key_x": "2",
        ...
        "key_z": "3"
    }
}
Run Code Online (Sandbox Code Playgroud)

我想用名称排除所有键,"key_x"结果应该是

{
    "key1": {
        ...
        "key_z": "2"
    },
    "key2": {
        ...
        "key_z": "3"
    }
}
Run Code Online (Sandbox Code Playgroud)

jq

11
推荐指数
1
解决办法
3361
查看次数

如何在变量有句点时使用jq

我正在努力让以下工作,而不是,请帮助我:

curl -s 'https://cryptofresh.com/api/asset/markets?asset=MKR' | jq .OPEN.BTC
Run Code Online (Sandbox Code Playgroud)

有问题的变量包括一个时期,我试图逃避这段时间的所有事情&&也尝试用引号围绕它; 不去; 这是我想要的变量(我在没有任何过滤器的情况下运行jq,并在此处截断输出以显示我需要的内容.提前感谢未来的问题解决者!

curl -s 'https://cryptofresh.com/api/asset/markets?asset=MKR' | jq
....
 "OPEN.BTC": {
"volume24": 0.932166,
"price": 0.09995,
"updated": "2016-05-04T03:03:29.000Z"
},
....
Run Code Online (Sandbox Code Playgroud)

key special-characters jq

11
推荐指数
2
解决办法
4176
查看次数

使用jq(cmdline)添加json数组元素

我正在尝试在bash中生成一个json文件.我安装了jq,希望它能帮助我生成和附加json.

例如,我想以这种格式生成一个json:

{
  "Project": [
    {
      "projectName": {
        "branch": [
          {
            "branchName": [
              "path"
            ]
          }
        ],
        "tag": [
          {
            "tagName": [
              "path"
            ]
          }
        ]
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

虽然可以像这样,使用以下过滤器

 .Project=.Project+.Project+
  [{"projectName" : {"branch" : (.branch+[{"branchName":(.tagName+["path"])}]),
             "tag": (.tag+[{"tagName":(.tagName+["path"])}]) }}]
Run Code Online (Sandbox Code Playgroud)

当我想在同一个项目和名称中创建另一个条目时,它会创建一个全新的条目,如果它是一个新项目,则会产生以下结果:

    {
      "Project": [
        {
          "projectName": {
            "branch": [
              {
                "branchName": [
                  "path"
                ]
              }
            ],
            "tag": [
              {
                "tagName": [
                  "path"
                ]
              }
            ]
          }
        },
        {
          "projectName": {
            "branch": [
              {
                "branchName": [
                  "path"
                ]
              }
            ],
            "tag": …
Run Code Online (Sandbox Code Playgroud)

bash ubuntu jq

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

将JSON文件拆分为单独的文件

我有一个大的JSON文件,它是一个对象的对象,我想在对象键之后拆分成单独的文件名.是否可以使用jq或任何其他现成的工具来实现这一目标?

原始JSON采用以下格式

{ "item1": {...}, "item2": {...}, ...}

鉴于此输入,我想生成文件item1.json,item2.json等.

json split file jq

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

如何判断jq过滤器是否成功从JSON数据结构中提取数据?

我想知道给定的过滤器是否成功从JSON数据结构中提取数据.例如:

###### For the user steve...

% Name=steve
% jq -j --arg Name "$Name" '.[]|select(.user == $Name)|.value' <<<'
[
   {"user":"steve", "value":false},
   {"user":"tom", "value":true},
   {"user":"pat", "value":null},
   {"user":"jane", "value":""}
]'
false
% echo $?
0
Run Code Online (Sandbox Code Playgroud)

注意:成功的结果可以包括布尔值,null甚至是空字符串.

###### Now for user not in the JSON data...

% Name=mary
% jq -j --arg Name "$Name" '.[]|select(.user == $Name)|.value' <<<'
[
   {"user":"steve", "value":false},
   {"user":"tom", "value":true},
   {"user":"pat", "value":null},
   {"user":"jane", "value":""}
]'
% echo $?
0
Run Code Online (Sandbox Code Playgroud)

如果过滤器不从JSON数据结构中提取数据,我需要知道这一点.我希望过滤器返回非零返回码.

我如何确定选择器是否成功从JSON数据结构中提取数据而无法提取数据?

重要提示:上面的过滤器只是一个示例,解决方案需要适用于任何jq过滤器.

注意:评估环境是Bash 4.2+.

bash json return-code jq

10
推荐指数
2
解决办法
6041
查看次数

使用jq匹配字段名称的模式

这是一个非常基本的(可能是愚蠢的)问题,但我无法让它发挥作用......

我有一个这种结构的json文件

{                                                                                                                                                                                                                                              
    "data": {
        "what a burger": [1,2,3],
        "wap": [66],
        "the map": [11,20],
        "H. Incandenza": [1,1],
        "What a burger": [a,a,3]
    }
}
Run Code Online (Sandbox Code Playgroud)

我想提取"name"与某个模式匹配的数据中的字段值.例如,我想提取所有不区分大小写的"汉堡"的巧合

[1,2,3],[α,α,3]

我的猜测是这样的

jq '.data | match("what a burger";"i")'
Run Code Online (Sandbox Code Playgroud)

但这会导致

jq: error (at <stdin>:9): object ({"what a bu...) cannot be matched, as it is not a string
Run Code Online (Sandbox Code Playgroud)

干杯.

regex json key match jq

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

如何使用 jq 通配符

我有以下 json :

{  
   "details":{  
      "car": "bmw",
      "addresses":{  
         "ext-118-21-8-0-29":[  
            {  
               "version":4,
               "addr":"89 Psr"
            },
            {  
               "version":6,
               "addr":"56 apT"
            }
         ]
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

关键ext-118-21-8-0-29是动态的,下次会改变,我不知道确切的值,这就是为什么我需要使用通配符。我需要获取addrversion 所在的键的值4

我期待作为输出 89 Psr

我使用函数尝试了以下操作startswith()

jq '.detail.addresses | select(startswith("ext"))'
Run Code Online (Sandbox Code Playgroud)

但它以错误结束。

jq:错误(在:0):startswith() 需要字符串输入

json key wildcard jq

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

基本的jq用法。如何获得嵌套价值

这必须非常简单,但是手册页对我来说毫无意义。 curl example.com/json给我

{
 "stats": {
  "storage_server.disk_total": XXXXXXXXXX
 },
 "counters": {}
}
Run Code Online (Sandbox Code Playgroud)

我想提取XXXXXXXXXXdisk_total 的值。这样做的语法是什么?

json key jq

9
推荐指数
3
解决办法
5870
查看次数