使用$ .extend()合并两个json文件

时间:2017-05-23 11:48:45

标签: javascript jquery json

我有一个函数,我用$http.get()加载了两个本地json文件。加载这些文件后,我想将它合并到一个json文件中。我用$.extend()尝试了这个,我在JQuery文档中找到了它。

$http.get()次调用中打印出我的变量,我可以在控制台中看到我的变量和回调是正确的。当我打印合并变量时,它仍然是空的。怎么了?

第一个JSON文件:

{
    "Default_Default_Add": "Hinzufügen",
    "Default_Default_AllInRibbon": "Alle im Band",
    "Default_Default_ApplicationMode_Development": "Entwicklung",
    "Default_Default_ApplicationMode_Education": "Schulung",
    "Default_Default_ApplicationMode_Production": "Produktion",
    "Default_Default_ApplicationMode_Testing": "Test",
    "Default_Default_Back": "Zurück"
}

第二个JSON文件:

{
    "Default_Return_Success": "Erfolg",
    "Success_Success_ChangePassword": "Passwort erfolgreich geändert",
    "Success_Success_DefaultRole": "Standardrolle wurde gesetzt",
    "Success_Success_Delete": "Erfolgreich gelöscht",
    "Success_Success_DeleteApplicationSetting": "ApplicationSetting erfolgreich gelöscht",
    "Success_Success_DeleteAscertainmentInstrument": "Erhebung erfolgreich storniert. "
}

功能:

loadData() {
    let json1: any;
    let json2: any;
    this.$http.get('../../app/shared/labels/default.de.json').success(function (data) {
        json1 = data;
        console.log(json1); //PRINT LINE 58
        console.log(data); //PRINT LINE 59
    });
    this.$http.get('../../app/shared/labels/success.de.json').success(function (data) {
        json2 = data;
        console.log(json2); //PRINT LINE 63
        console.log(data); //PRINT LINE 64
    });

    let json = $.extend({}, json1, json2);
    console.log(json); //PRINT LINE 68

    return json;
}

控制台打印: enter image description here

我认为某些事情的顺序错误,或是在所有事情都被加载之前快速执行,我不知道。希望得到一些帮助。

!!!编辑!!!:

    let json1 = this.$http.get('../../app/shared/labels/default.de.json');
    let json2 = this.$http.get('../../app/shared/labels/success.de.json');
    let json: any;

    this.$q.all([json1, json2]).then(() => {
        let json = $.extend({}, json1, json2);
        console.log(json);
    });

结果:enter image description here

2 个答案:

答案 0 :(得分:1)

承诺稍后解决。您正在尝试合并尚未收到的jsons。尝试如下:

var mergedResult=null;
$.when( 
    this.$http.get('../../app/shared/labels/default.de.json'), 
    this.$http.get('../../app/shared/labels/success.de.json') )
  .done(function( json1, json2 ) {
       mergedResult = $.extend({}, json1, json2);        
});

答案 1 :(得分:1)

使用Deferreds

$.when( 
  this.$http.get('../../app/shared/labels/default.de.json'), 
  this.$http.get('../../app/shared/labels/success.de.json') 
).done( function( a1, a2 ) {
  json = $.extend({}, a1, a2);
});