将对象收集到数组中不起作用
collecting objects into array doesn't work
我有一个 JSON 个对象的输入文件(来自应用程序的日志文件):
{
"Url": "http://bla-bla/method1",
"ReturnCode": 200,
...
}
{
"Url": "http://bla-bla/method2",
"ReturnCode": 500,
...
}
等等
我通过jq
中的一些转换(例如select
、正则表达式函数等)来操纵它,最后我塑造了最终的对象
| { UserName, Url, Duration }
但是我想将这个流收集(正如 jq 所说的那样)到一个数组中,以便 group_by
。我看到的所有示例都以数组开头,然后有 | [.[] | { UserName, Url, Duration }]
,这是可行的。但是,如果我只指定 [{ UserName, Url, Duration }]
,我不会得到一个数组;相反我得到
[
{
"UserName": "John",
"Url": "http://bla-bla/method1",
"Duration ": 10
}
]
[
{
"UserName": "Bob",
"Url": "http://bla-bla/method2",
"Duration": 15
}
]
没有任何意义!
注意 - 我知道我可以使用 jq "my rules" | jq -s
并且它有效。但是应该有一种方法可以在规则本身内部创建一个数组!
当您从对象流开始时,您可以使用 --slurp
(或 -s
)标志将对象作为数组成员读入(您不必使用另一个调用,只需以 jq -s '<your filter, maybe using a map>'
) 开头,或将 inputs
与 --null-input
(或 -n
)标志结合使用,这样可以更灵活地构造数组:jq -n '[inputs] | …'
甚至 jq -n '[inputs | …]'
,具体取决于您的实际处理流程。
jq
中的所有内容都是过滤器。即使像 1
这样无害的值也是一个过滤器:它会忽略其输入并生成数字 1
作为输出。
[...]
也是一个过滤器。对于输入中的每个值,它将封闭的过滤器应用于该值并将输出收集到一个数组中。
这意味着创建单个数组作为输出的唯一方法是将单个值作为输入。如果 jq
的输入是一个值流,jq '[...]
将产生一个输出流。为了将值流转换为单个数组,您需要先使用 -s
选项。
我有一个 JSON 个对象的输入文件(来自应用程序的日志文件):
{
"Url": "http://bla-bla/method1",
"ReturnCode": 200,
...
}
{
"Url": "http://bla-bla/method2",
"ReturnCode": 500,
...
}
等等
我通过jq
中的一些转换(例如select
、正则表达式函数等)来操纵它,最后我塑造了最终的对象
| { UserName, Url, Duration }
但是我想将这个流收集(正如 jq 所说的那样)到一个数组中,以便 group_by
。我看到的所有示例都以数组开头,然后有 | [.[] | { UserName, Url, Duration }]
,这是可行的。但是,如果我只指定 [{ UserName, Url, Duration }]
,我不会得到一个数组;相反我得到
[
{
"UserName": "John",
"Url": "http://bla-bla/method1",
"Duration ": 10
}
]
[
{
"UserName": "Bob",
"Url": "http://bla-bla/method2",
"Duration": 15
}
]
没有任何意义!
注意 - 我知道我可以使用 jq "my rules" | jq -s
并且它有效。但是应该有一种方法可以在规则本身内部创建一个数组!
当您从对象流开始时,您可以使用 --slurp
(或 -s
)标志将对象作为数组成员读入(您不必使用另一个调用,只需以 jq -s '<your filter, maybe using a map>'
) 开头,或将 inputs
与 --null-input
(或 -n
)标志结合使用,这样可以更灵活地构造数组:jq -n '[inputs] | …'
甚至 jq -n '[inputs | …]'
,具体取决于您的实际处理流程。
jq
中的所有内容都是过滤器。即使像 1
这样无害的值也是一个过滤器:它会忽略其输入并生成数字 1
作为输出。
[...]
也是一个过滤器。对于输入中的每个值,它将封闭的过滤器应用于该值并将输出收集到一个数组中。
这意味着创建单个数组作为输出的唯一方法是将单个值作为输入。如果 jq
的输入是一个值流,jq '[...]
将产生一个输出流。为了将值流转换为单个数组,您需要先使用 -s
选项。