You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jq多文件输入处理:模拟方式验证与命令报错排查

解决jq多文件输入的错误问题

问题根源

你在jq play里用JSON Lines(ndjson,每行一个JSON对象)模拟多文件输入,过滤器能正常运行,但在GitHub Actions里传入的是完整的单个JSON文件(每个文件是独立的JSON文档,不是行分隔格式),两者输入模式不匹配,导致jq把第一个文件的JSON内容当成字符串处理,触发string ("{") has no keys错误。

正确处理多文件输入的方式

jq处理多个文件时,默认将第一个文件的内容作为初始上下文(.),后续文件的内容通过inputs函数获取。以下两种方法适配实际文件输入场景:

方法1:结合初始上下文与inputs函数

如果需要分别处理第一个文件和后续文件,先把第一个文件内容存为变量,再通过inputs读取其他文件:

# 示例:将第一个文件与第二个文件的JSON对象合并(根据你的实际逻辑调整)
. as $firstFile | inputs | $firstFile + .

执行命令:

jq '. as $firstFile | inputs | $firstFile + .' mappings.json other-file.json

方法2:用--slurp选项合并所有输入为数组

如果需要批量处理所有输入文件,使用-s(--slurp)选项将所有文件的JSON内容合并成一个数组,再遍历处理:

# 示例:合并数组中所有JSON对象(根据你的实际逻辑调整)
reduce .[] as $item ({}; . + $item)

执行命令:

jq -s 'reduce .[] as $item ({}; . + $item)' mappings.json other-file.json

验证逻辑

你之前的过滤器是针对ndjson设计的,而实际输入是完整JSON文档,导致jq解析时把整个JSON字符串当成了上下文,当过滤器尝试访问其键值时就会报错。切换到上述两种方法后,就能正确识别每个文件的JSON结构。

内容的提问来源于stack exchange,提问作者Christopher Rucinski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 05:12:18