2016-03-08 21 views
0

您好,我是節點js中的新成員。我想添加一個結果數組的鍵並將其打印在json數組中。陣列密鑰未添加到節點js

connection.modal.find({ 'id' : '2' }, function (err, result) { 
    var response = {}; 

    result['add_key'] = 'abcdd'; 
    response['success'] = true; 
    response['result'] = result; 
    response['msg'] = 'Result fetched'; 
    res.json(response); 
}); 

它打印而不add_key

+0

「結果」聲明在哪裏?它是什麼類型的變量?如果它是一個數組,那麼當轉換成JSON時,數組的屬性不會枚舉。而且,您在JSON響應中看到了什麼? – jfriend00

+0

它是來自查詢結果的結果數組。 我更新了我的問題。 – iam

+0

'result'的類型是'Array',那麼result''add_key'] ='abcdd''是否正確? – BlackMamba

回答

0

JSON數組數據類型不能命名的陣列上的按鍵。

正常的JavaScript數組被設計爲保存帶有數字 索引的數據。您可以將命名密鑰填充到它們(當您想要存儲有關正常數組的元數據的元數據時,這可能很有用 ,數字索引數據),,但這不是他們爲設計的 。

如果您想要命名鍵,請使用Object而不是Array。

var test = {};   // Object 
test['a'] = 'test'; 
test['b'] = [];   // Array 
test['b'].push('item'); 
test['b'].push('item2'); 
test['b'].push('item3'); 
var json = JSON.stringify(test); 
alert(json); 
+0

這是從查詢結果來的結果數組。 我更新了我的問題。 – iam

0

雖然Javascript數組可以自定義屬性,如要使用此行代碼做:

result['add_key'] = 'abcdd'; 

JSON.stringify()(因此res.json()太)只能將實際的數組元素(不定製屬性)生成的JSON中。所以,如果result是一個數組,那麼這就是爲什麼該屬性不會顯示在生成的JSON中。

實際上,JSON文本格式只對數組的JSON格式有數組元素。有沒有地方像你的['add_key]屬性定期的定製屬性。該屬性必須位於JSON中顯示的普通對象上。

section 7 of the JSON specification其中陣列被描述,它 清楚地表明,對於數組中的唯一的JSON表示是 數組元素本身(由逗號分隔)。數組的表達式中沒有屬性名稱/值對的位置。


你沒有顯示正是你想要得到的JSON是什麼樣子,但也有其他一些方法,你可以代表add_key屬性和值。您可以在財產轉移到response對象:

connection.modal.find({ 'id' : '2' }, function (err, result) { 
    var response = {}; 

    response['add_key'] = 'abcdd'; 
    response['success'] = true; 
    response['result'] = result; 
    response['msg'] = 'Result fetched'; 
    res.json(response); 
}); 

你可以把結果到它自己的對象,該對象可能會對它的add_key屬性:

connection.modal.find({ 'id' : '2' }, function (err, result) { 
    var response = {}; 
    var resultContainer = {}; 

    resultContainer['add_key'] = 'abcdd'; 
    resultContainer['result'] = result; 
    response['success'] = true; 
    response['result'] = resultContainer; 
    response['msg'] = 'Result fetched'; 
    res.json(response); 
}); 

僅供參考,不這樣做必須通常使用括號語法來設置屬性。你也可以做到這一點(很多找了一下清潔劑):

connection.modal.find({ 'id' : '2' }, function (err, result) { 
    var response = {}; 

    response.add_key = 'abcdd'; 
    response.success = true; 
    response.result = result; 
    response.msg = 'Result fetched'; 
    res.json(response); 
}); 

你必須使用括號語法是,如果屬性名是一個字符串變量或唯一的時間,如果它包含AREN某些字符」 t允許在點語法中使用。對於常規字母字符和不在變量中的屬性名稱,可以使用點語法。