如何用JQ基于size键替换数组值并保留原数组长度
JQ 按size替换数组元素并保持长度
假设你的输入JSON结构如下:
{ "firstArray": [ {"size": "S"}, {"size": "M"}, {"size": "XL"}, {"size": "L"} ], "secondArray": [ {"size": "S", "name": "Small"}, {"size": "M", "name": "Medium"}, {"size": "L", "name": "Large"} ] }
期望输出(保持firstArray长度,匹配size替换为对应name,无匹配项保留原size):
{ "firstArray": ["Small", "Medium", "XL", "Large"], "secondArray": [ {"size": "S", "name": "Small"}, {"size": "M", "name": "Medium"}, {"size": "L", "name": "Large"} ] }
直接用这条JQ命令就能实现:
(.secondArray | INDEX(.size; .name)) as $sizeMap | .firstArray |= map($sizeMap[.size] // .size)
关键逻辑说明
- 构建映射表:
INDEX(.secondArray[]; .size)把secondArray转换为以size为键、name为值的对象(比如{"S":"Small", "M":"Medium", "L":"Large"}),用变量$sizeMap存储。 - 遍历替换:
.firstArray |= map(...)对目标数组逐个处理,用元素的size去$sizeMap中查找对应name;//是JQ的默认值运算符,当找不到匹配项时,保留原size值(如果需要替换为空,改成// null即可)。
如果你的数组字段名不是firstArray/secondArray,替换成实际字段名就行。
内容的提问来源于stack exchange,提问作者shadowgirl26
相关产品推荐
相关产品推荐

