这可能是一个非常简单的问题,但我无法解决它。我尝试使用this question通过jq的--stream选项提取一些数据。下面是我的json示例:
{
"date": "2023-07-30",
"results":[
{
"data": [
{"row": [{"key1": "row1", "key2": "row1"}]},
{"row": [{"key1": "row2", "key2": "row2"}]}
]
},
{
"data": [
{"row": [{"key1": "row3", "key2": "row3"}]},
{"row": [{"key1": "row4", "key2": "row4"}]}
]
}
]
}
字符串
如果没有stream,我可以使用下面的代码来提取我想要的内容:
jq -rc ".results[]" my_json.json
型
这会给予我想要的结果:
{"data":[{"row":[{"key1":"row1","key2":"row1"}]},{"row":[{"key1":"row2","key2":"row2"}]}]}
{"data":[{"row":[{"key1":"row3","key2":"row3"}]},{"row":[{"key1":"row4","key2":"row4"}]}]}
型
这个输出是每行一个json对象,正是我想要的。
但是,如果我想使用stream选项做同样的事情,我就无法得到相同的输出。
jq -rc --stream 'fromstream(1|truncate_stream(inputs | select(.[0][0] == "results")))' my_json.json
型
其给出:
[
{"data":[{"row":[{"key1":"row1","key2":"row1"}]},{"row":[{"key1":"row2","key2":"row2"}]}]},
{"data":[{"row":[{"key1":"row3","key2":"row3"}]},{"row":[{"key1":"row4","key2":"row4"}]}]}
]
型
我觉得我错过了一个简单的步骤来得到我需要的答案。
1条答案
按热度按时间vfh0ocws1#
您需要通过两个级别
truncate_stream
:.results
和.[]
。使用inputs
(和-n
标志)作为输入,使用fromstream
构造输出:字符串
如果要显式指定
.results
(如果输入包含的字段不止这一个,则必须指定),请在输入上使用select
:型
输出量:
型