我需要做一些 CURL,从中构建一个输出 JSON。这就是我设法使用函数执行合并的方式:
...
ADDITIONALJSONDATA="{\"$DATATYPE\" : "$DATA"}"
MERGEDENTRY=$(echo $SOURCE | jq --argjson json "$ADDITIONALJSONDATA" '. += $json' | tr -d '\r\n')
...
似乎当 $DATA
中的 JSON 足够大时,我就会收到 Argument list too long
错误。是否可以(以一种很好的方式)在此处将 JSON 合并为单个参数?
最佳答案
如果像这里的情况一样,您已经有了 $DATA 和 $DATATYPE,那么就不需要 ADDITIONALJSONDATA
一般来说,在这里使用
tr -d '\r\n'
是非常糟糕的做法,例如因为它可以将 1 和 2 揉在一起制成 12
希望以下内容能满足您的要求:
MERGEDENTRY=$(jq -c --arg TYPE "$DATATYPE" --slurpfile A <(printf '%s\n' "$DATA") '
. += {($TYPE): $A[0]}' <<< "$SOURCE")
(我们需要在这里使用 $A[0]
,因为“slurping”将 $DATA 放入数组中。)
关于json - 使用 jq 将长 JSON 与另一个合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47442344/