当前位置: 首页 > 面试题库 >

序列化,将实体转换为普通对象

艾昊明
2023-03-14
问题内容

我对javascript并不太熟悉,而且令人赞叹,因为我无法向使用ORM名称Sequelize.js从数据库中获取的对象添加新属性。

为了避免这种情况,我使用此技巧:

db.Sensors.findAll({
    where: {
        nodeid: node.nodeid
    }
}).success(function (sensors) {
        var nodedata = JSON.parse(JSON.stringify(node)); // this is my trick
        nodedata.sensors = sensors;
        nodesensors.push(nodedata);
        response.json(nodesensors);
});

因此,通常如何向对象添加新属性。

如果有帮助,我使用sequelize-postgres版本2.0.x。

更新。 console.log(节点):

{ dataValues: 
   { nodeid: 'NodeId',
     name: 'NameHere',
     altname: 'Test9',
     longname: '',
     latitude: 30,
     longitude: -10,
     networkid: 'NetworkId',
     farmid: '5',
     lastheard: Mon Dec 09 2013 04:04:40 GMT+0300 (FET),
     id: 9,
     createdAt: Tue Dec 03 2013 01:29:09 GMT+0300 (FET),
     updatedAt: Sun Feb 23 2014 01:07:14 GMT+0300 (FET) },
  __options: 
   { timestamps: true,
     createdAt: 'createdAt',
     updatedAt: 'updatedAt',
     deletedAt: 'deletedAt',
     touchedAt: 'touchedAt',
     instanceMethods: {},
     classMethods: {},
     validate: {},
     freezeTableName: false,
     underscored: false,
     syncOnAssociation: true,
     paranoid: false,
     whereCollection: { farmid: 5, networkid: 'NetworkId' },
     schema: null,
     schemaDelimiter: '',
     language: 'en',
     defaultScope: null,
     scopes: null,
     hooks: { beforeCreate: [], afterCreate: [] },
     omitNull: false,
     hasPrimaryKeys: false },
  hasPrimaryKeys: false,
  selectedValues: 
   { nodeid: 'NodeId',
     name: 'NameHere',
     longname: '',
     latitude: 30,
     longitude: -110,
     networkid: 'NetworkId',
     farmid: '5',
     lastheard: Mon Dec 09 2013 04:04:40 GMT+0300 (FET),
     id: 9,
     createdAt: Tue Dec 03 2013 01:29:09 GMT+0300 (FET),
     updatedAt: Sun Feb 23 2014 01:07:14 GMT+0300 (FET),
     altname: 'Test9' },
  __eagerlyLoadedAssociations: [],
  isDirty: false,
  isNewRecord: false,
  daoFactoryName: 'Nodes',
  daoFactory: 
   { options: 
      { timestamps: true,
        createdAt: 'createdAt',
        updatedAt: 'updatedAt',
        deletedAt: 'deletedAt',
        touchedAt: 'touchedAt',
        instanceMethods: {},
        classMethods: {},
        validate: {},
        freezeTableName: false,
        underscored: false,
        syncOnAssociation: true,
        paranoid: false,
        whereCollection: [Object],
        schema: null,
        schemaDelimiter: '',
        language: 'en',
        defaultScope: null,
        scopes: null,
        hooks: [Object],
        omitNull: false,
        hasPrimaryKeys: false },
     name: 'Nodes',
     tableName: 'Nodes',
     rawAttributes: 
      { nodeid: [Object],
        name: [Object],
        altname: [Object],
        longname: [Object],
        latitude: [Object],
        longitude: [Object],
        networkid: [Object],
        farmid: [Object],
        lastheard: [Object],
        id: [Object],
        createdAt: [Object],
        updatedAt: [Object] },
     daoFactoryManager: { daos: [Object], sequelize: [Object] },
     associations: {},
     scopeObj: {},
     primaryKeys: {},
     primaryKeyCount: 0,
     hasPrimaryKeys: false,
     autoIncrementField: 'id',
     DAO: { [Function] super_: [Function] } } }

接下来,我想您会想到的是:“好吧,很简单,只需将您的属性添加到dataValues中即可。”

node.selectedValues.sensors = sensors;
node.dataValues.sensors = sensors;

我添加了这行,这行不通


问题答案:

如果我答对了,您想将sensors集合添加到中node。如果两个模型之间都有映射,则可以使用此处说明的include功能或在每个实例上定义的getter。您可以在此处找到相关文档。values

后者可以这样使用:

db.Sensors.findAll({
  where: {
    nodeid: node.nodeid
  }
}).success(function (sensors) {
  var nodedata = node.values;

  nodedata.sensors = sensors.map(function(sensor){ return sensor.values });
  // or
  nodedata.sensors = sensors.map(function(sensor){ return sensor.toJSON() });

  nodesensors.push(nodedata);
  response.json(nodesensors);
});

有机会也有nodedata.sensors = sensors可能。



 类似资料:
  • 问题内容: 有没有一种方法可以将JSON数组转换为用于Java ListView数据绑定的普通Java数组? 问题答案:

  • 问题内容: 似乎无法使用WCF的本机DataContractJsonSerializer或ASP.NET的本机JavaScript序列化器将Entity Framework对象序列化为JSON。这是由于两个串行器都拒绝的引用计数问题。我还尝试了Json.NET,它在引用计数问题上也特别失败。 编辑: Json.NET现在可以序列化和反序列化Entity Framework实体 。 我的对象是Ent

  • 问题内容: 由于某种原因,我无法在MDN文档中找到这个简单的东西(也许我只是想念它)。 我希望这可以工作: …但是第一行抛出 如何从普通对象制作地图?我真的必须首先将其转换为键值对数组的数组吗? 问题答案: 是的,构造函数采用键值对数组。 是ES2017(19.1.2.5)中可用的新的Object静态方法。 如果您需要支持较旧的环境,并且不适合使用Transpilation,请使用polyfill

  • 问题内容: 我有一个猫鼬的文档,我想在JSON编码之前进行扩展并作为响应发送出去。如果我尝试向文档添加属性,则将其忽略。该属性不会出现无法进行正常扩展的情况。奇怪的是,它可以正常工作并返回具有所有正确属性的对象。有一个更好的方法吗? 问题答案: 猫鼬继承自s,后者有一个方法。我相信您要寻找的应该是的结果。 http://mongoosejs.com/docs/api.html#document_D

  • 问题内容: 服务器响应: 我从服务器获取Person数组。我想将通用的Person数组转换为输入的Person数组。所以我可以用 我创立了Javascript 但是我想要带有数组支持的跨浏览器版本 要么 问题答案: 在JavaScript中创建对象需要调用其构造函数。因此,首先,您将需要找到正确的参数,而这些参数可能并不总是仅仅是属性。之后,您可以将所有公共属性从JSON解析的对象重新分配给创建的

  • 问题内容: 我的页面会生成这样的URL:如何将其转换为普通地址? 我将其用作的属性。 问题答案: 从JavaScript创建的URL 不能转换为“普通” URL。 一个URL并不是指在服务器上存在的数据,它是指数据您的浏览器目前在存储器中,当前页面。它在其他页面上将不可用,在其他浏览器中将不可用,并且在其他计算机上将不可用。 因此,通常来说,将URL 转换为“正常” URL 是没有意义的。如果要使