【问题标题】:JSON.stringify shows property value, but cannot access property directly [duplicate]JSON.stringify 显示属性值,但不能直接访问属性[重复]
【发布时间】:2020-02-13 18:37:41
【问题描述】:

当尝试直接访问 JSON 对象的属性(该对象来自 MongoDB 文档)时,我得到一个未定义的值。但是, JSON.stringify() 确实为该属性生成了一个值。如何直接访问该属性而无需进行 JSON.parse(JSON.stringify()) 调用?

考虑以下代码:

console.log(p.isFinal);
console.log(p.playoffType);
console.log(JSON.parse(JSON.stringify(p)).playoffType);

这些行的输出是:

false
undefined
seed

注意:在示例中,p =

{ _id: 5da0eef8d7772b13dc58d2e1,
  week: 14,
  isFinal: false,
  isPlayoff: true,
  playoffType: 'seed',
  playoffTeams: [ 4, 5 ],
  teams: [] }

...所以我希望输出是:

false
seed
seed

另请注意:如果我将 p 声明为对象文字,则直接属性调用有效。只有当 p 是 MongoDB 调用的结果值时才会产生不正确的结果。

我认为这暗示了值在 MongoDB 调用中的存储方式,因为在通过 parse(stringify(p)) 调用强制执行之前,字符串类型的属性不会被识别为属性。

提前感谢您的帮助!

【问题讨论】:

  • 如何发出 mongodb 请求?可以分享一下吗?

标签: javascript json mongodb stringify


【解决方案1】:

原来答案与 MongoDB 类型有关,特别是未在模式中显式声明属性。此 SO 帖子中的更多内容:

Mongoose - can't access object properties?

将“playoffType”属性添加到架构(下面的 sn-p)后,直接 p.playoffType 调用按预期工作。

const ffMatchupSchema = new Schema({
  teams: {type: [
    {
      owner_id: {type: Schema.Types.ObjectId, ref: 'Owner'},
      ff_teams: {type: {}},
      wins: {type: Number},
      isFinal: {type: Boolean}, 
      starter_points: {type: Number}
    }], required: false},
  week: {type: Number},
  winner: {type: {}},
  matchup_id: {type: Number}, 
  isFinal:{type: Boolean},
  isPlayoff: {type: Boolean},
  playoffType: {type: String}, 
  playoffTeams: {type: [mongoose.Mixed]}
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2022-08-13
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多