2016-11-08 22 views
0

我想節點JS以改變從大寫字母JSON數組鍵名稱爲較低的情況下鍵作爲以下下部殼體在JSON鍵 -

[ 
    { 
     "_id": "581f2749fb9b6f22308f5063", 
     "WorkshopId": "1", 
     "WorkshopTitle": "workshop1", 
     "WorkshopPrice": "200", 
     "WorkshopDescription": "workshop1 is a test workshop", 
     "FloorNumber": "1", 
     "RoomNumber": "205", 
     "WorkshopLanguage": "english language", 
     "LastOnlineRegistrationDate": "15/10/2016", 
     "WorkshopDate": "1/11/2016", 
     "WorkshopStartTime": "8:00 AM", 
     "WorkshopEndTime": "11:00 AM", 
     "WorkshopRules": "Rules will be mentioned here", 
     "WorkshopCapacity": "200", 
     "Speaker": { 
      "SpeakerName": "John doe", 
      "AboutSpeaker": "About the speaker" 
     } 
    }, 
    { 
     "_id": "581f27e796915434f44cd678", 
     "WorkshopId": "2", 
     "WorkshopTitle": "workshop2", 
     "WorkshopPrice": "200", 
     "WorkshopDescription": "workshop2 is a test workshop", 
     "FloorNumber": "1", 
     "RoomNumber": "205", 
     "WorkshopLanguage": "english language", 
     "LastOnlineRegistrationDate": "15/10/2016", 
     "WorkshopDate": "1/11/2016", 
     "WorkshopStartTime": "11:00 AM", 
     "WorkshopEndTime": "02:00 PM", 
     "WorkshopRules": "Rules will be mentioned here", 
     "WorkshopCapacity": "200", 
     "Speaker": { 
      "SpeakerName": "Jane doe", 
      "AboutSpeaker": "Jane doe - About the speaker" 
     } 
    } 
] 

例如WorkshopId必須改爲workshopid,我在節點js中有一個函數,用於在mongodb中查詢一個集合並返回json:

getWorkshops: function (db, response) { 
       db.collection('Workshops').find().toArray(function (err, results) { 
        var convertedArr = []; 
        //convert the json. 
        response.send(JSON.stringify(convertedArr)); 
     }); 

任何幫助?

+0

你想要的所有鍵的字母小寫或只有第一個? – wscourge

+1

[如何使用小寫鍵解析JSON到對象]可能重複(http://stackoverflow.com/questions/14697352/how-to-parse-json-to-object-with-lower-case-key) – Jagrut

回答

1

這將映射對象的鍵爲小寫:

var upperCased = [ 
    { ID: 1, NAME: 'Fred' }, 
    { ID: 2, NAME: 'Sarah' }, 
    { ID: 3, NAME: 'Joe' }, 
]; 


var lowerCased = upperCased.map(function(item) { 
    var mapped = {}; 
    for (var key in item) { 
    mapped[key.toLowerCase()] = item[key]; 
    } 

    return mapped; 
}); 

https://jsfiddle.net/5ouebw4b/2/

+0

map函數可以做到這一點,如果集合具有嵌套集合,我怎樣才能小寫內部鍵? –

+0

看起來像遞歸的候選人;你必須將邏輯提取到一個函數中,該函數可以遞歸調用以適應幾個級別。 –

+0

我已經快速的去了這裏:https://jsfiddle.net/5ouebw4b/12/ –

0

你可以用自定義給它toJSON()功能:

getWorkshops: function (db, response) { 
    db.collection('Workshops').find().toArray(function (err, results) { 
     results.toJSON = function() { 
      var newArr = []; 
      for (var obj in this) { 
       if (!this.hasOwnProperty(obj) || 'toJSON' === obj) continue; 

       var newObj = {}; 
       for (var prop in this[obj]) { 
        if (!this[obj].hasOwnProperty(prop)) continue; 

        newObj[prop.toLowerCase()] = this[obj][prop]; 
       } 

       newArr.push(newObj); 
      } 

      return newArr; 
     }; 

     response.send(JSON.stringify(results)); 
    }); 
}