【问题标题】:Merging two json arrays (loaded into memory) into one json array将两个 json 数组(加载到内存中)合并为一个 json 数组
【发布时间】:2019-04-29 10:42:13
【问题描述】:

我有两个 json 数组,我已经初始化如下。

local=[{"account_id":"01C","id":"0XVWKCFV6P9CA5"},{"account_id":"CSDTHQ","id":"631QGYBNSF"},...............]

org=[{"account_id":"BJPKWSH","id":"15BS0XP4F91V6YH4G0PV"},{"account_id":"01BKK44V5F6A1FKH60Q0ANX9JX","id":"01BKK44V7"},.....................]

我想要的是如下所示。

outputJson=[{"account_id":"BJPKWSH","id":"15BS0XP4F91V6YH4G0PV"},
{"account_id":"BJPKWSH","id":"15BS0XP4F91V6YH4G0PV"},
{"account_id":"01BKK44V5F6A1FKH60Q0ANX9JX","id":"01BKK44V7"},.....................]        

即我想将这两个 json 数组合并为一个。 我试过了,

jq -s '.[0] * .[1]' <<< "$local $org"

但它给了parse error: Invalid literal at line 1, column 17

【问题讨论】:

  • 单引号变量内容?
  • 以上变量是我得到的 sql 查询输出,对我来说单引号这些项目听起来不可行。
  • 如果您将 sql 结果存储在变量中,请使用进程替换将结果直接输入 jq,例如 &lt; &lt;(sqlite first query ; sqlite second query)
  • sjsam,单引号似乎也不起作用,用这个。 sed "s/\"/'/g" &lt;&lt;&lt; "$local" &gt; localsed "s/\"/'/g" &lt;&lt;&lt; "$org" &gt; org
  • 如果你已经初始化了像local=[{"account_id":...这样的变量,那么所有的双引号都没有了。您需要将 json 值用单引号括起来,同时将它们分配给变量,例如 local='[{"account_id":...'

标签: json linux bash shell jq


【解决方案1】:

使用+,而不是*

#!/bin/sh

j1='[{"account_id":"01C","id":"0XVWKCFV6P9CA5"},{"account_id":"CSDTHQ","id":"631QGYBNSF"}]'
j2='[{"account_id":"BJPKWSH","id":"15BS0XP4F91V6YH4G0PV"},{"account_id":"01BKK44V5F6A1FKH60Q0ANX9JX","id":"01BKK44V7"}]'
echo $(jq -s '.[0] + .[1]' <<EOF
$j1
$j2
EOF
)

产生:

[ { "account_id": "01C", "id": "0XVWKCFV6P9CA5" }, { "account_id": "CSDTHQ", "id": "631QGYBNSF" }, { "account_id": "BJPKWSH", "id": "15BS0XP4F91V6YH4G0PV" }, { "account_id": "01BKK44V5F6A1FKH60Q0ANX9JX", "id": "01BKK44V7" } ]

【讨论】:

  • 您的括号在echo 语句中放错了位置?我用了这个,``` echo $(jq -s '.[0] + .[1]') $j1 $j2 EOF 它一直在等待输入。跨度>
  • @RajivRai 没有放错地方,也没有挂起。只需将整个脚本复制并粘贴到文件中并运行即可查看。
  • 完全执行了您在此处给出的内容,并且引发了错误。 ./test.bash:第 20 行:警告:此处文档在第 20 行,由文件结尾分隔(需要 EOF') ./test.bash: line 19: warning: here-document at line 19 delimited by end-of-file (wanted EOF') null ./test.bash:第 20 行:[{“account_id”:“01C ","id":"0XVWKCFV6P9CA5"},{"account_id":"CSDTHQ","id":"631QGYBNSF"}]: 找不到命令 ./test.bash: 第 21 行: [{"account_id":"BJPKWSH ","id":"15BS0XP4F91V6YH4G0PV"},{"account_id":"01BKK44V5F6A1FKH60Q0ANX9JX","id":"01BKK44V7"}]:找不到命令 ./test.bash:第 22 行:EOF:找不到命令
  • @RajivRai 请停止尝试在评论中放置大量代码或错误消息或任何其他按行拆分的内容。它不起作用。
  • @RajivRai 如果您在第 22 行遇到错误,您没有将脚本复制并粘贴到我的答案中,因为它没有那么多行。
【解决方案2】:

我不确定我是否了解您的需求。如果您需要将两个数组合并为一个,则可以使用

jq '[.[0][], .[1][]]' <<< "[$local, $org]"

【讨论】:

    猜你喜欢
    • 2019-08-30
    • 2012-05-10
    • 2020-06-16
    • 1970-01-01
    • 2013-12-25
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多