Объединить один объект в другой объект файла JSON - PullRequest
0 голосов
/ 29 марта 2019

Поскольку я впервые работаю в сценариях оболочки и парсере json, т.е. в библиотеке jq.

Я хотел объединить детали одного свойства file1 и file2 внутри другого файла3 вместе с остальными деталями свойства.

Не удалось объединить свойства файла1 и файла2, но не удалось получить подробные сведения для отображения в файле3.

В основном не удалось присвоить сохраненное значение определенному ключевому свойству в файле3

j1.json

{
  "catalog": {
    "git_branch_name": "Release_Sprint1912",
    "git_commit_number": "7ff5358b6d919228ae6043f7bb64abd890c6dfe9",
    "git_repo_name": "catalog"
  },
  "swirl_components": {
    "git_branch_name": "Release_Sprint1912",
    "git_commit_number": "78ed0b1d0e25a261b89160a037530cf6c594892f",
    "git_repo_name": "swirl_components"
  },
  "demo_app": {
    "git_repo_name": "demo_app",
    "git_branch_name": "Release_Sprint1912",
    "git_commit_number": "1f227bb19343d19629b302c425adb8f21f4fab5a"
  }
}

j2.json

{
  "swirl_app": {
    "version": "readBuildInfo_311",
    "image_name": "/swirl_app:readBuildInfo_311",
    "date_time": "Mon Mar 25 05:55:45 UTC 2019",
    "git_latest_commit": "4b7bef6970f83e6e7fc04302c8b29d7cfd4a1885",
    "jenkins_build_url": "http://10.229.6.14/job/HC_Dev/job/Code-Build/job/swirl_app/311/",
    "artifactory_path": "ARTIFACTORY PATH"
  }
}

Ожидаемый выход:

{
  "catalog": {
    "git_branch_name": "Release_Sprint1912",
    "git_commit_number": "7ff5358b6d919228ae6043f7bb64abd890c6dfe9",
    "git_repo_name": "catalog"
  },
  "swirl_components": {
    "git_branch_name": "Release_Sprint1912",
    "git_commit_number": "78ed0b1d0e25a261b89160a037530cf6c594892f",
    "git_repo_name": "swirl_components"
  },
  "demo_app": {
    "git_repo_name": "demo_app",
    "git_branch_name": "Release_Sprint1912",
    "git_commit_number": "1f227bb19343d19629b302c425adb8f21f4fab5a"
  },
  "swirl_app": {
    "git_repo_name": "demo_app",
  "git_branch_name": "Release_Sprint1912",
  "git_commit_number": "1f227bb19343d19629b302c425adb8f21f4fab5a",
  "version": "readBuildInfo_311",
  "image_name": "/swirl_app:readBuildInfo_311",
  "date_time": "Mon Mar 25 05:55:45 UTC 2019",
  "git_latest_commit": "4b7bef6970f83e6e7fc04302c8b29d7cfd4a1885",
  "jenkins_build_url": "http://10.229.6.14/job/HC_Dev/job/Code-Build/job/swirl_app/311/",
  "artifactory_path": "ARTIFACTORY PATH"
  }
}

попытался:

j1=$(echo jq "." j1.json) 
j2=$(echo jq "." j2.json)
demo=$(echo jq '.demo_app' j1.json)
jq -s 'add' $j1 $j2
jq ".swirl_app" j2.json >> swirl.json
jq '.demo_app' j1.json >> demo.json
jq -s 'add' demo.json swirl.json
total=$(echo jq -s 'add' demo.json swirl.json)

не удалось или попытался:

jq ".swirl_app={}" j3.json // makes empty object of "swirl_app": {}
jq ".swirl_app=$total" j3.json // this fails as expect result
jq ".swirl_app|=$total" j3.json // this too fails as expected result

Мои мысли: 1) Должны ли мы сделать это массив?и затем присваивать значение 2) Над переменной назначить работает, но неправильно сделано?

Окончательный вариант: Нужна помощь по этому поводу, чтобы понять, что не так с моей стороны.

1 Ответ

1 голос
/ 29 марта 2019

Прибавьте файлы, чтобы вы могли объединить их, затем обновите объекты соответствующим образом.

$ jq -s 'add | .swirl_app = .demo_app + .swirl_app' j{1,2}.json > j3.json
{
  "catalog": {
    "git_branch_name": "Release_Sprint1912",
    "git_commit_number": "7ff5358b6d919228ae6043f7bb64abd890c6dfe9",
    "git_repo_name": "catalog"
  },
  "swirl_components": {
    "git_branch_name": "Release_Sprint1912",
    "git_commit_number": "78ed0b1d0e25a261b89160a037530cf6c594892f",
    "git_repo_name": "swirl_components"
  },
  "demo_app": {
    "git_repo_name": "demo_app",
    "git_branch_name": "Release_Sprint1912",
    "git_commit_number": "1f227bb19343d19629b302c425adb8f21f4fab5a"
  },
  "swirl_app": {
    "git_repo_name": "demo_app",
    "git_branch_name": "Release_Sprint1912",
    "git_commit_number": "1f227bb19343d19629b302c425adb8f21f4fab5a",
    "version": "readBuildInfo_311",
    "image_name": "/swirl_app:readBuildInfo_311",
    "date_time": "Mon Mar 25 05:55:45 UTC 2019",
    "git_latest_commit": "4b7bef6970f83e6e7fc04302c8b29d7cfd4a1885",
    "jenkins_build_url": "http://10.229.6.14/job/HC_Dev/job/Code-Build/job/swirl_app/311/",
    "artifactory_path": "ARTIFACTORY PATH"
  }
}
...