Я хочу объединить два объекта JSON в новый.Я пытаюсь использовать jsonmerge с полной схемой json, но я не знаю, как правильно настроить стратегии слияния.Я почти уверен, что это можно сделать.
Код:
import json
from jsonmerge import Merger
from jsonschema import validate
full_build = {
"captures": [
{
"compiler": "gnu",
"executable": "gcc",
"cmd": ["gcc", "options", "file1.cpp"],
"cwd": ".",
"env": ["A=1", "B=2"],
},
{
"compiler": "gnu",
"executable": "gcc",
"cmd": ["gcc", "options", "file2.cpp"],
"cwd": ".",
"env": ["A=1", "B=2"],
}
]
}
incremental_build = {
"captures": [
{
"compiler": "gnu",
"executable": "gcc",
"cmd": ["gcc", "new options", "file2.cpp"],
"cwd": ".",
"env": ["A=1", "NEW=2"],
},
{
"compiler": "gnu",
"executable": "gcc",
"cmd": ["gcc", "options", "file3.cpp"],
"cwd": ".",
"env": ["A=1", "B=2"],
}
]
}
schema = {
"type" : "object",
"properties" : {
"captures": {
"type" : "array",
"items" : {
"type" : "object",
"properties" : {
"cmd" : {
"type" : "array",
"items" : {"type" : "string"},
},
"compiler" : {"type" : "string"},
"cwd" : {"type" : "string"},
"env" : {
"type" : "array",
"items" : {"type" : "string"},
},
"executable" : {"type" : "string"},
}
}
}
}
}
validate(instance=full_build, schema=schema)
mergeSchema = schema
merger = Merger(mergeSchema)
result = merger.merge(full_build, incremental_build)
print(json.dumps(result, indent=3))
Результат:
{
"captures": [
{
"compiler": "gnu",
"executable": "gcc",
"cmd": [
"gcc",
"options",
"file3.cpp"
],
"cwd": ".",
"env": [
"A=1",
"B=2"
]
}
]
}
Ожидаемый результат:
{
"captures": [
{
"compiler": "gnu",
"executable": "gcc",
"cmd": [
"gcc",
"options",
"file1.cpp"
],
"cwd": ".",
"env": [
"A=1",
"B=2"
]
},
{
"compiler": "gnu",
"executable": "gcc",
"cmd": [
"gcc",
"new options",
"file2.cpp"
],
"cwd": ".",
"env": [
"A=1",
"NEW=2"
]
},
{
"compiler": "gnu",
"executable": "gcc",
"cmd": [
"gcc",
"options",
"file3.cpp"
],
"cwd": ".",
"env": [
"A=1",
"B=2"
]
}
]
}
ТамЕсть много вещей, которые нужно учитывать (например, иметь больше или меньше параметров / переменных среды, чем раньше), но я думаю, с небольшим намеком мне удастся завершить задачу.Я действительно не хочу жестко его кодировать.
И нет, я не могу изменить структуру json: (.
Справочная информация: я хочу объединить выходные данные обертки сборки SonarQube, потому что я не хочувыполнить полную сборку, чтобы получить все файлы в вывод обёртки.