【发布时间】:2021-03-28 17:06:58
【问题描述】:
以下 2 个 jq 语句读取大型 json 文件并复制到另一个 json 文件。但是此语句会引发“参数太长”错误。这对于较小的 json 文件来说非常好。
$ apiDefinitionString=`jq -r '. | tojson' api.json`
$ jq --arg definition "$apiDefinitionString" '.apiDefinition = $definition' api-new.json > api-spec.json
我尝试用 ----slurpfile 替换 --arg 以及在另一个线程1 中推荐的相同错误。
我还有其他选择来解决这个 Jq 问题吗?这是Jq限制吗?提前致谢。
【问题讨论】:
-
简单地用 --slurpfile 替换 --arg 没有工作的机会。请更严格地遵循minimal reproducible example 指南。 $apiDefinitionString 的值是多少?您在使用 --slurpfile 时究竟尝试了什么?你看过jq手册对--slurpfile的解释吗?
-
@peak 如果输出变量大小为 204800 或更大,我也会遇到同样的错误。我在做什么,我正在创建一个各种大小的 var(输出),然后将其插入到这样的 json 对象中 #在这里创建一个所需大小的 var 200Kb output=$(tr -dc A-Za-z0-9 new_file.json -bash: /bin/jq: Argument list too long 当我使用各种大小的变量时,有什么建议可以解决这个问题吗?
-
@PrashantPathak - 您是否尝试过我的 A 中给出的方法来解决这个问题?
-
@peak 在您的回答中,我看到一个文件被读入一个变量,然后该变量作为 apiDefinition 数组下的 json 文件中的一个文件传递,并将其重定向到一个文件。就我而言,我正在创建一个变量并从标准输出流中为其分配随机大小的字符串,然后尝试将 var 插入到 json key:val 中。无法执行您在我的场景中给出的建议。
-
@PrashantPathak - 也许你误解了这个例子。您可能想使用
sponge。