LINUX.ORG.RU
ФорумAdmin

jq + bash. Помогите склеить файлы.

 ,


0

1

Добрый день. Задачка ни как мне не даётся. Помогите пожалуйста, с виду всё просто: Два json добавить в третий bash скриптом.

1.json

{"male": {"Petr": "24", "Duck": "2"}}

2.json

{"women": {"Anna": "21", "swan": "2"}}

config.json

{
  "droid": {
    "bb8": "live",
    "r2d2": {
      "sleep: "true"
    }
  }    
}

Мне нужно дописать 1.json и 2.json в поле «human» и вставить в корень. Итог вот такой пытаюсь получить:

{
  "droid": {
    "bb8": "live",
    "r2d2": {
      "sleep: "true"
    }
  }    
  "human": {
    "male": {
      "Petr": "24", 
      "Duck": "2"
    },
    "women": {
      "Anna": "21", 
      "swan": "2"
    }
  }
}

Подскажите пожалуйста, как мне сделать это в bash? Я упёрся в то, что не могу прокидывать переменные в jq. Пробовал через –argjson или просто jq -c «. + {human: (.human + ${1json}) }». Не выходит аленький цветочек (

Спасибо за любую помощь.


cat 1.json 2.json ... | jq --slurp --slurpfile config config.json '$config[0] + { human: (reduce .[] as $object ({}; . + $object)) }'

Заодно обобщил на произвольное количество входных файлов.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)

звучит как лабараторка…

если это практическая задача, возьми лучше нормальный инструмент, хотя бы бидон

import json

config=open(file='config.json').read(); 
config=json.loads(config)

file1=open(file='1.json').read(); 
file1=json.loads(file1)

file2=open(file='2.json').read(); 
file2=json.loads(file2)

human = {'human': {**file1, **file2}}
total = {**config, **human}

print(json.dumps(total))
Ford_Focus ★★★★★
()

Возьми питон (или т.п.) и сделай это там.

AlexVR ★★★★★
()

jq кал, придуманный наркоманом, меня в свое время выбесил его синтаксис. действительно, проще уж на любом нормальном языке программирования все сделать

tz4678 ★★
()
Ответ на: комментарий от intelfx

Похоже работает! Спасибо огромное. intelfx - ты просто меня спас! Мой поклон.

Про питон многие сказали - отписываю.

Питон не выбрал:

  • придётся подтягивать библиотеки. Сервера не имеющие интернета - не выполнят скрипт (jq предустановлен).
  • Файл config не мой. Поля в файле, могут обновляться в релизами или пропадать из файла. Распарсить его питоном или go, и собрать - проблематично. Поддерживать свой скрипт - муторно.
  • Скрипт на 2+ листа уже написан на bash. Перепрыгивать - болезненно. Вписывать питон … вот про это не думал. Можно … но пункты выше… такое.

Большое спасибо за внимание!

ishk0
() автор топика
Последнее исправление: ishk0 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.