json - 使用 jq 将长 JSON 与另一个合并

标签 json bash jq

我需要做一些 CURL,从中构建一个输出 JSON。这就是我设法使用函数执行合并的方式:

...
ADDITIONALJSONDATA="{\"$DATATYPE\" : "$DATA"}" 
MERGEDENTRY=$(echo $SOURCE | jq --argjson json "$ADDITIONALJSONDATA" '. += $json' | tr -d '\r\n')
 ...

似乎当 $DATA 中的 JSON 足够大时,我就会收到 Argument list too long 错误。是否可以(以一种很好的方式)在此处将 JSON 合并为单个参数?

最佳答案

  1. 如果像这里的情况一样,您已经有了 $DATA 和 $DATATYPE,那么就不需要 ADDITIONALJSONDATA

  2. 一般来说,在这里使用 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/

相关文章:

bash - 如何在脚本中使用 ping

json - jq select() 和 sort_by()

json - 将 JSON 文件拆分为单独的文件

rounding - jq: error: round/0 未在 <top-level> 定义

javascript - 给定一个对象,我如何获得用于描述它的名称?

ruby-on-rails - 在 Rails 中渲染大量 ActiveRecord 对象

linux - ksh + 比较数字 – 两种方式

java - 需要从中获取 JSONObjects

php - 将 Dropbox 集成到我的网站中

bash - 如何在 bash 中获取 Centos 7 服务器的 ip 地址