如何使用TypeScript比较两个JSON文件的内容?

时间:2019-02-26 20:23:57

标签: javascript json typescript

如何比较Angular中两个JSON文件的内容并达到以下结果:

假设我有一个 default.json 文件,如下所示:

default.json

 {
  "name": "John"
  "age": 30,
  "car1": "Ford"
  "car2": "BMW"
  "car3": "Fiat"
 }

和另一个 specific.json 文件,如下所示:

specific.json

 {
  "name": "Doe",
  "car1": "Tesla",
  "car4": "Mercedes"
 }

default.json 始终包含所有可能的键以及 specific.json 的键,应该被覆盖和其他键,这些键不包含在 default.json 中(在我的示例中为“ car4”)。

现在应该通过比较检查以下内容:

如果特定键(在我的示例中为“ name”和“ car1”) specific.json 中的值与在 default.json 中使用相同的密钥,则应覆盖并使用这些值。否则,始终使用 default.json 中的默认值和 specific.json 中的其他值>当然是(在我的示例中是“ car4”)

最后应同时使用两个文件,因此,specific.json仅用作default.json的更新或扩展。我在Angular应用程序中需要此功能,在这里我必须比较两个JSON文件,然后使用ngx-translate库根据应用程序的特定业务案例提供特定的翻译。如果需要,也请检查我有关此主题的问题:Translations based on specific keys in custom JSON files and business cases with ngx-translate (Angular 7)

我希望我能很好地解释它:)

2 个答案:

答案 0 :(得分:1)

这与Angular无关,但与JS有关。

下面的示例说明如何使用对象。

let def = {
  "name": "John",
  "age": 30,
  "car1": "Ford",
  "car2": "BMW",
  "car3": "Fiat"
};

let specific = {
  "name": "Doe",
  "car1": "Tesla",
  "car4": "Mercedes"
}

function compose(def, spec) {
  return Object.assign(def, spec);
}

console.log(compose(def, specific));

输出:

/*
{ 
  name: 'Doe',
  age: 30,
  car1: 'Tesla',
  car2: 'BMW',
  car3: 'Fiat',
  car4: 'Mercedes' 
}
*/

答案 1 :(得分:1)

使用es6传播运算符合并(并覆盖)对象

const defaultObj = {
  name: 'John',
  age: 30,
  car1: 'Ford',
  car2: 'BMW',
  car3: 'Fiat'
};

const specificObj = {
  name: 'Doe',
  car1: 'Tesla',
  car4: 'Mercedes'
}

console.log({ ...defaultObj, ...specificObj });