Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将动态json对象添加到JQbash_Bash_Jq - Fatal编程技术网

如何将动态json对象添加到JQbash

如何将动态json对象添加到JQbash,bash,jq,Bash,Jq,我需要根据使用bash传递的参数添加一个动态JSON对象。目前,我可以生成动态表对象,但在输出中它作为字符串追加。请帮帮我。 bash demo.bashsarika@gmail.comabc演示h 我有密码: Tables=$( for i in "${@:3}"; do jq -n \ --arg tn $i \ '{"table_name":$tn}'

我需要根据使用bash传递的参数添加一个动态JSON对象。目前,我可以生成动态表对象,但在输出中它作为字符串追加。请帮帮我。
bash demo.bashsarika@gmail.comabc演示h
我有密码:

Tables=$(  for i in "${@:3}"; do
                jq -n \
                  --arg tn $i \
                  '{"table_name":$tn}'
                done )

echo $Tables |jq '.'
tab=$( echo $Tables |jq '.'  )
# tab= $Tables |jq '.'

JSON_STRING=$( jq -n \
                  --arg gb "$VALUE" \
                  --arg tables "$tab" \
                  '{"email":$gb,"tables":[($tables)]}'\
                  )
它给出的输出:

{
  "email": "sarika@gmail.com",
  "tables": [
    "{\n \"table_name\": \"demo\",\n}\n{\n \"table_name\": \"h\",\n}"
  ]
}

我需要这样的结果:

{
  "email": "sarika@gmail.com",
  "tables": [
    {
      "table_name": "table1"
    },
    {
      "table_name": "table2"
    }
  ]
}

看起来你在找这个:

tables=$(for i in "${@:3}"; do jq -n --arg tn "$i" '{"table_name": $tn}'; done | jq -s .)

jq -n \
    --arg gb "$VALUE" \
    --argjson tables "$tables" \
    '{"email": $gb, "tables": $tables}'
出了什么问题,我是如何解决的:

  • 第一个循环中的
    jq
    生成格式为
    {“table_name”:$tn}
    的JSON对象。要从这些对象中形成JSON数组,在对象之间使用适当的
    分隔符,您需要通过
    jq-s对这些对象进行管道传输。
  • 要将JSON对象作为参数传递,请使用
    --argjson
    而不是
    --arg
  • 要嵌入JSON数组
    $tables
    ,请编写
    “tables”:$tables
    而不是
    “tables”:[$tables]
    ,这样会创建不必要的数组
  • 这不是一个错误,但有一个非常坏的习惯,就是不使用双引号变量作为命令行参数

您似乎正在寻找:

tables=$(for i in "${@:3}"; do jq -n --arg tn "$i" '{"table_name": $tn}'; done | jq -s .)

jq -n \
    --arg gb "$VALUE" \
    --argjson tables "$tables" \
    '{"email": $gb, "tables": $tables}'
出了什么问题,我是如何解决的:

  • 第一个循环中的
    jq
    生成格式为
    {“table_name”:$tn}
    的JSON对象。要从这些对象中形成JSON数组,在对象之间使用适当的
    分隔符,您需要通过
    jq-s对这些对象进行管道传输。
  • 要将JSON对象作为参数传递,请使用
    --argjson
    而不是
    --arg
  • 要嵌入JSON数组
    $tables
    ,请编写
    “tables”:$tables
    而不是
    “tables”:[$tables]
    ,这样会创建不必要的数组
  • 这不是一个错误,但有一个非常坏的习惯,就是不使用双引号变量作为命令行参数