如何在NodeJS中获取此数据结构?

时间:2016-06-08 09:31:50

标签: json node.js list object dictionary

我想获得以下结构,并且能够修改相应密钥的用户数组,并使用json响应发送它。

var data = ["A": [user1,user6,user9], "B": [user2], "E": [user3], "S": [user10], "Z": [user7], "J": [user8]]

datajsonObject内向客户端(Swift)发送时应采用此格式:[String : [User]]

这是我到目前为止所尝试的,

var dict = [];
var jsonObject = {};
User.find({}, function(err, users) {
    if (err) {
        return res.status(500).send(err);
    } else {
        users.forEach(function(user) {
            dict[user.name.substring(0, 1)] = []
            dict[user.name.substring(0, 1)].push(user)
        });

    }
   jsonObject["key"] = dict
   return res.status(200).json(jsonObject);

});

虽然console.log(jsonObject)正确打印,但json响应是:

{
  "key": []
}

在客户端(Swift),我想尝试制作这样的东西。但它会给出错误。

.responseJSON(completionHandler: { response -> Void in
           if let jsonObj = response.result.value {
                 if let result = jsonObj["key"] as? [String: [User]]
                 {
                   var dict : [String: [User]] = result
                           print(dict)
                 } 
                                                 }
})

请帮助吗?

1 个答案:

答案 0 :(得分:0)

我试过这种方法。似乎足以满足您对数据的需求。

var _ = require('lodash');

User.find({}, function (err, users) {
  if (err) {
    return res.status(500).send(err);
  }

  var data = {};
  _.each(users, (user) => {
    var key = user.name.substring(0, 1);
    var value = data[key];
    if (_.isUndefined(value)) {
        value = [];
    }
    value.push(user);
    data[key] = value;
  });

  return res.status(200).send({
    key: data
  });
});

我用var users = [{name: 'Andrew'}, {name: 'Blake'}, {name: Cathy'}, {name: 'Anderson'}, {name: 'Bresnan'}];

测试了它