Добавление объектов JSON с использованием jq - PullRequest
0 голосов
/ 03 июля 2018

у меня ниже JSON структура

{

    "a": "aVal",
    "x": {
      "x1": "x1Val",
      "x2": "x2Val"
    }
    "y": {
      "y1": "y1Val"
    }
}

Я хочу добавить "x3": "x3Val","x4": "x4Val" к x. Таким образом, вывод должен быть

{
    ...
    "x": {
      ....
      "x3": "x3Val",
      "x4": "x4Val",
    }
    ...
}

Возможно ли использовать jq ?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Конечно, это довольно просто для jq:

jq '.x += {"x3": "x3Val","x4": "x4Val"}' file.json

Выход:

{
  "a": "aVal",
  "x": {
    "x1": "x1Val",
    "x2": "x2Val",
    "x3": "x3Val",
    "x4": "x4Val"
  },
  "y": {
    "y1": "y1Val"
  }
}
0 голосов
/ 03 июля 2018

Да, если вы добавите запятую в строку 8 после закрывающей скобки } (в противном случае jq не будет анализировать ваши входные данные JSON):

$ jq '.x.x3="x3val"|.x.x4="x4val"' file
{
  "a": "aVal",
  "x": {
    "x1": "x1Val",
    "x2": "x2Val",
    "x3": "x3val",
    "x4": "x4val"
  },
  "y": {
    "y1": "y1Val"
  }
}

В качестве альтернативы, если вам нужно передать значения в качестве аргумента, используйте параметр --arg:

jq --arg v3 "x3val" --arg v4 "x4val" '.x.x3=$v3|.x.x4=$v4' file
...