JQ创建多级JSON

时间:2018-10-22 18:52:10

标签: json jq

我希望从头开始创建一个如下所示的JSON文件:

{
   "Key1": {
      "SubKey1": "Value1",
      "SubKey2": "Value2"
    }
}

我的bash脚本中有以下变量:

$key1
$subkey1
$subkey2
$value1
$value2

我尝试了几次JQ,但没有结果:

   jq --arg key1 $key1 \
  --arg subkey1 $subkey1 \
  --arg value1 $value1 \
  --arg subkey2 $subkey2 \
  --arg value2 $value2 \
  '[$key1].[$subkey1]=$value1 | [$key1].[$subkey2]=$value2' <<<'{}'
jq: error: syntax error, unexpected '[', expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:
.[key1].[subkey1]=$value1 | .[key1].[subkey2]=$value2        
jq: 1 compile error

    jq --arg key1 $key1 \
   --arg subkey1 $subkey1 \
   --arg value1 $value1 \
   --arg subkey2 $subkey2 \
   --arg value2 $value2 \
   '.$key1 | .[$subkey1]=$value1 | .[$subkey2]=$value2' <<<'{}'
{
  "SubKey1": "Value1",
  "SubKey2": "Value2"
}

但是我没有得到正确的结果。

1 个答案:

答案 0 :(得分:1)

使用多个--arg标志的方法可以按如下所示工作:

key1=Key1
subkey1=SubKey1
subkey2=SubKey2
value1=Value1
value2=Value1

jq -n --arg key1 "$key1" --arg subkey1 "$subkey1" --arg subkey2 "$subkey2" --arg value1 "$value1" --arg value2 "$value2" '
{
   ($key1): {
       ($subkey1): $value1,
       ($subkey2): $value2
    }
}
'

或者...

.[$key1] = (.[$subkey1]=$value1 | .[$subkey2]=$value2)