【问题标题】:Lower casing the keys in JSON - Node JS小写 JSON 中的键 - Node JS
【发布时间】:2016-11-08 13:15:27
【问题描述】:

我想将 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));
        });

有什么帮助吗?

【问题讨论】:

标签: javascript json node.js mongodb


【解决方案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/

【讨论】:

  • map 函数可以解决问题,如果集合有嵌套集合,我如何将内部键小写?
  • 看起来像是递归的候选;您必须将逻辑提取到一个可以递归调用自身以满足多个级别的函数中。
  • 在嵌套项是数组的情况下工作;如果嵌套项是一个对象,您还必须对其进行测试并处理它,但希望这对您有帮助。一切顺利。
【解决方案2】:

您可以使用自定义 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));
    });
}

【讨论】:

    猜你喜欢
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2018-10-12
    • 2018-09-15
    • 2017-07-02
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多