arrays - 如何根据兄弟对象属性中的索引从数组中选择对象?
问题描述
我正在尝试处理一些jq
类似于此的 JSON:
[
{
"name": "Albert"
},
{
"name": "Brian",
"parentIndex": 0
},
{
"name": "Carol",
"parentIndex": 0
},
{
"name": "Dwayne",
"parentIndex": 2
},
{
"name": "Ethel",
"parentIndex": 3
},
{
"name": "Francis",
"parentIndex": 3
}
]
我想在列表中找到具有特定 的所有对象name
,例如"Carol"
,然后在列表中获取它们的索引,然后使用这些索引来获取列表中的所有对象,这些对象基于它们的parentIndex
. 所以,上面应该返回 Dwayne 的对象。
我知道我可以通过以下方式获得索引:
jq '[.[] | .name == "Carol"] | indices(true)'
但不确定如何使用索引将对象从列表中取出。
解决方案
好的,在为 SO 创建一个更简单的测试用例时想通了。我最终不得不使用一个我以前从未使用过的变量jq
。如果您知道没有变量的简单方法,我很想看到它。
以上问题可以通过以下方式解决:
jq '. as $top
| .[]
| select(
$top[.parentIndex? | values]
.name == "Carol"
)'
它在每一行上的作用是:
- 将初始输入分配给
$top
。这是必要的,因为在我们评估是否针对select
单个对象时,我们不再可以访问没有变量的整个数组。 - 将数组拆分为对象流
- 选择对象,如果...
- ...
$top
数组中的对象在此对象的位置parentIndex
... - ...有
name
一个"Carol"
推荐阅读
- javascript - 在通过 AJAX 发送之前存储客户数据(电话)的最佳方式
- r - 解析字符中的数值,因为它们与`scipen`的值无关
- swift - Swift – 将 Stripe 更新到 21.0.1 后“没有这样的模块‘Stripe3DS2’”
- php - 尝试在 laravel 8.0 中记录事件时调用未定义的方法
- python - 我无法删除整列 - Pandas
- r - 在 for 循环中打印 DiagrammeR 对象
- c - 在 C 中运行“parsefmt”的头文件?
- python-3.x - 我应该如何减少重复数字的大型笛卡尔积的内存使用量?
- javascript - MathJax 消息转换器
- laravel - Laravel Collection 根据下一条记录设置结束日期