【发布时间】:2019-07-26 15:29:30
【问题描述】:
我是 jq 1.5 和 1.6 的中高级用户。我正在迭代一个对象数组(比如说,以前十位数字的名称为键)。我有一个字符串数组存储在变量 $odd_fields (["one","three",...,"nine"]) 中。不使用复杂的迭代过程(因为我可以只用 map({one,three,...,nine}) 静态地做到这一点,我希望能够将我的对象数组重新转换为对象数组参考我的键数组,并按此顺序,如 map({$odd_fields[]})。
经过数百次尝试,如果没有静态成员列表,我似乎无法一次性完成。我已经能够通过创建一个不需要的键数组和映射 del($unwanted_keys[]) 来近似这个,但我不在乎我扔掉了什么键(我没有信心第 50 个对象没有一个我不想要的额外键),只有我想要保留的键(或创建,如果丢失),因此数组中的每个对象都具有相同的任意键(我的键)以相同的顺序(适用于@csv)。
这是一般需要,与特定 JSON glob 或特定键集没有直接关系,因此没有示例 JSON。
大多数不产生语法或引用错误的尝试都会给我一个对象数组 [{"odd_fields":["one","three",...,"nine"]},...],或者,一些迭代过程只给了我想要的键的值。我想要整个一致的子集对象,就好像我列表中没有的任何键都不存在一样。
此外,任何可以告诉我的向导 - 在遍历对象时,有什么方法可以确定“.”的关键是什么?类似于: {"one":1,"two":2,"three":3}|map(.|my_key) (其中函数 my_key 显示 . 的键是什么)。我意识到有一种更简单的方法可以执行上述示例,但我希望能够确定 . 在其他不太直接的代码中的键。我不需要使用它来从对象中提取所有键,只需从任意“。”中提取一个键。
【问题讨论】:
-
我没有对您的问题投反对票,但除非您按照minimal reproducible example 准则对其进行编辑,否则您可能会获得更多的反对票。即使您的问题很笼统,也很高兴提供相关示例。另外,我建议编辑此 Q 以便它只问一个问题,并按照这些准则单独问你的第二个问题。
-
您的问题令人困惑,阅读时间过长,格式不合适。请以更好更快的方式提出您的问题,以便我们为您提供帮助。
-
道歉。长期读者,第一次发帖,我很快就从工作中抽出来了,没有考虑礼仪或简洁。下次我会做得更好。感谢建设性的批评。干杯!