使用 jq,我正在搜索一个大型 json 文件,该文件具有在属性中包含多个年份值的对象。我希望能够缩小搜索范围,只检索大于或小于(更早或更年轻)的对象(例如 2015 年)。这很棘手,因为属性可以有多个年份值,一些大于和小于我正在搜索的年份。
这是我正在搜索的代码示例。基本上都是这样。
cat stackover.json
{
"tokens": [
{
"Name": "stack overflow",
"year": [
"1997",
"1998",
"1997"
]
},
{
"Name": "Return pizza",
"year": [
"1998",
"2015",
"2014",
"1998"
]
}
]
}
我知道如何搜索包含其中一个值的...但可以弄清楚如何搜索所有值并确定它们是否都小于 2000。
如果我搜索小于'<',那么我就没有放回去了。如果我搜索大于“>”,那么我会多次返回这两个对象
cat stackover.json | jq '.tokens[] | select(.year[] > 2000)'
{
"Name": "stack overflow",
"year": [
"1997",
"1998",
"1997"
]
}
{
"Name": "stack overflow",
"year": [
"1997",
"1998",
"1997"
]
}
{
"Name": "stack overflow",
"year": [
"1997",
"1998",
"1997"
]
}
{
"Name": "Return pizza",
"year": [
"1998",
"2015",
"2014",
"1998"
]
}
{
"Name": "Return pizza",
"year": [
"1998",
"2015",
"2014",
"1998"
]
}
{
"Name": "Return pizza",
"year": [
"1998",
"2015",
"2014",
"1998"
]
}
{
"Name": "Return pizza",
"year": [
"1998",
"2015",
"2014",
"1998"
]
}
我正在努力实现的目标。
如果我搜索小于 2000 的任何内容,我想要一个只返回“堆栈溢出”的查询,因为它在可用值中没有 20XX 值。
cat stackover.json | code searching for only objects(stack overflow) where all values are less than 2000.
{
"Name": "stack overflow",
"year": [
"1997",
"1998",
"1997"
]
}