使用jq在json中匹配的元素之后/之前获取元素

塞尼哈

假设我向jq命令输入了以下json:

[
  {"type":"dog",  "set":"foo"},
  {"type":"bird", "set":"bar"},
  {"type":"cat",  "set":"blaz"},
  {"type":"fish", "set":"mor"}
]

我知道此数组中有一个元素type为“ bird”,在这种情况下为第二个元素。但是我想要它的下一个(或上一个)同级,即它之后(之前)的元素,在这种情况下,是第三个(第一个)元素。如何在jq中获得它?

另外,我还有一个问题:如果匹配的元素(即type我知道其值的元素)是数组中的最后一个元素,我希望它获得下一个第一个元素(即循环遍历数组)而不返回任何东西。无论匹配的元素是第一个元素(然后我想获取最后一个元素),都相同。

德米特里

让我也为您提供一种替代解决方案,该解决方案基于JSON的步行路径unix工具:jtc-您可以在其中将查询逻辑“编码”到路径中:

例如找到一条"type":"bird"记录,然后在同级对象之前(在父级数组中)将是这样的:

bash $ <file.json jtc -w'[type]:<bird> [-1]<idx>k [-1]>idx<t-1' -r
{ "set": "foo", "type": "dog" }

让我为您分解一下:

  • [type]:<bird> -将递归查找记录 "type":"bird"
  • [-1]<idx>k-将在JSON树中提升1层(选择父级,有效选择整个记录{"type":"bird", "set":"bar"}),并将其数组索引存储到名称空间中idx
  • [-1]>idx<t-1-将再次在JSON中提高1级(选择顶部数组),并(以递归方式)搜索索引(存储在中idx)偏移了的条目-1

同样可以选择下一个同级:

bash $ <file.json jtc -w'[type]:<bird>[-1]<idx>k[-1]>idx<t1'
{ "set": "blaz", "type": "cat" }

或者,选择第一个条目(基于最后一个匹配项):

bash $ <file.json jtc -w'[type]:<fish>[-1]<idx>k[-1]>idx<t-1000' -r
{ "set": "foo", "type": "dog" }

(只要放一些肯定较低的值作为相对量-它将标准化为第一个条目)

PS>披露:我是该jtc工具的创建者

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在某些条件之前和之后匹配元素

如何获取Java和C#中定义的元素之前和之后的所有元素

如何获取集合中某个元素之前和之后的1个元素(Java)

使用 jq 获取 JSON 实体流的第 n 个元素

使用jq解析json数据时获取父元素ID

Jsoup:获取某个元素之前的所有元素/删除某个元素之后的所有元素

在数组中某些元素之前/之后插入元素

使用javascript jquery在元素之后或元素之前添加html

使用jquery获取在span元素之后的文本,不包括span之前的文本

使用javascript中的数组从JSON获取元素

使用 jq 計算嵌套 JSON 中的元素

使用jq从Json文件中以表格形式关联元素

使用 jq 更改 json 对象数组中的特定元素

使用 jq 获取缺少键的数组元素

使用getElementByTagName时如何只获取DOM中匹配的元素?

使用jq删除嵌套数组的匹配/不匹配元素

获取在新列之前的列中的元素

我应该在知道要使用多少个元素之前或之后定义向量中的元素数量?

使用 JQ 在 Windows shell 中按子元素的内容过滤 JSON 的元素?

如何从json对象获取匹配元素的索引?

使用jq编辑子JSON元素值

<IE11中的伪元素之后/之前

Javascript:在&nbsp;之前的内容中添加元素 及之后<br>

在伪元素之前和之后使用以进行线条

在伪元素之前和之后使用CSS创建向左箭头

使用lxml访问根元素之前/之后的处理指令

基本使用伪元素时,Sass&符(之前/之后)

使用Chai匹配JSON对象数组中数组的元素

使用JQ解析对象的JSON数组,使用select匹配对象元素中的指定键值,然后转换为CSV