Объединение двух похожих объектов JSON, но один с большим количеством ключей в NodeJS - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть два вложенных json-файла, загруженных в мое приложение NodeJS, второй - это просто более новая версия первого - с большим количеством ключей.

Первыйчто-то вроде этого

{
  "something": {
    "first": "one",
    "second": "two"
  },
  "somethingelse": {
    "one": "first string",
    "two": "second string"
  }
}

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

{
  "something": {
    "first": "one",
    "second": "two",
    "third": "this one changed "
  },
  "somethingelse": {
    "one": "first string and this one changed",
    "two": "second string",
    "three": "third string"
  }
}

Я хочу иметь возможность объединить эти два объекта json, не толькообновить ключи, которые представлены в первом, но также добавить все ключи, которые не существуют в нем и присутствуют во втором. Как я могу достичь этого, самого простого и понятного способа?

Я попробовал этот код

function matchjson(json1, json2) {
    var combined_json = {};
    var i = 0
    // Deep copy of json1 object literal
    for (var key in json1) {

        combined_json[key] = json1[key];

    }
    for (var key in json2) {
       // console.log(key)
        if (!json1.hasOwnProperty(key)) combined_json[key] = json2[key]
    }
    return combined_json;
}

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

Это то, что я хочу получить в конце, после объединения этих двух объектов json сверху:

{
  "something": {
    "first": "one",
    "second": "two",
    "third": "this one changed "
  },
  "somethingelse": {
    "one": "first string and this one changed",
    "two": "second string",
    "three": "third string"
  }
}

1 Ответ

2 голосов
/ 21 апреля 2019

Поскольку вы хотите обновить первый объект ключами от второго, используйте расширение:

const json1 = {"something": {"first": "one","second": "two",},"somethingelse": {"one": "first string","two": "second string",}};
const json2 = {"something": {"first": "one","second": "two","third": "this one changed "},"somethingelse": {"one": "first string and this one changed","two": "second string","three": "third string"}};
const json3 = { ...json1, ...json2 };
console.log(json3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...