我有一个包含独立 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
如果不过滤,它将返回一个值)
从这个对象列表中,我只想获取字段email
和time
,并忽略其余字段,因此我使用了以下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" …
Android中是否有任何方法可以使用GLSurfaceView显示相机预览,同时在该表面上使用OpenGL效果?特别是加成混合效果.我知道OpenGL可以使用这些效果,我知道相机可以放在SurfaceView上,但是可以将相机放在GLSurfaceView中并将OpenGL混合效果应用于相机预览吗?
从以下输入:
{
"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) 我正在努力让以下工作,而不是,请帮助我:
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) 我正在尝试在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) 我有一个大的JSON文件,它是一个对象的对象,我想在对象键之后拆分成单独的文件名.是否可以使用jq或任何其他现成的工具来实现这一目标?
原始JSON采用以下格式
{ "item1": {...}, "item2": {...}, ...}
鉴于此输入,我想生成文件item1.json,item2.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+.
这是一个非常基本的(可能是愚蠢的)问题,但我无法让它发挥作用......
我有一个这种结构的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)
干杯.
我有以下 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
是动态的,下次会改变,我不知道确切的值,这就是为什么我需要使用通配符。我需要获取addr
version 所在的键的值4
。
我期待作为输出 89 Psr
我使用函数尝试了以下操作startswith()
。
jq '.detail.addresses | select(startswith("ext"))'
Run Code Online (Sandbox Code Playgroud)
但它以错误结束。
jq:错误(在:0):startswith() 需要字符串输入
这必须非常简单,但是手册页对我来说毫无意义。
curl example.com/json
给我
{
"stats": {
"storage_server.disk_total": XXXXXXXXXX
},
"counters": {}
}
Run Code Online (Sandbox Code Playgroud)
我想提取XXXXXXXXXX
disk_total 的值。这样做的语法是什么?