【问题标题】:Is it possible to add additional user defined properties other than standard properties in "keen" object?是否可以在“keen”对象中添加除标准属性之外的其他用户定义属性?
【发布时间】:2018-01-04 08:16:13
【问题描述】:

对于每一个敏锐事件,敏锐对象都会自动附加敏锐对象的结构。

var keen_event = {
 "keen": {
  "created_at": "2012-12-14T20:24:01.123000+00:00",
  "timestamp": "2012-12-14T20:24:01.123000+00:00",
  "id": "asd9fadifjaqw9asdfasdf939"
 },
 other properties...
}

但我想在敏锐对象中添加其他自定义属性为;

 {
 "keen": {
  "created_at": "2012-12-14T20:24:01.123000+00:00",
  "timestamp": "2012-12-14T20:24:01.123000+00:00",
  "id": "asd9fadifjaqw9asdfasdf939",
  "event_type" : "some_values",
  ...
 }
}

我尝试在敏锐上添加其他属性,而不是将敏锐事件编码为:

var encodedData = base64.encode(JSON.stringify(keen_event));

然后将编码数据传递给敏锐 api 以创建事件,但我收到错误消息:“敏锐命名空间的属性无效。您使用的是:\'event_type\'”。

有解决办法吗?在创建敏锐事件时,是否可以在“敏锐”对象上添加标准属性以外的自定义键值属性?提前致谢。

【问题讨论】:

  • Obj.keen.prop=...
  • 我尝试实现但仍然无法正常工作。我收到错误“敏锐命名空间的属性无效。您使用的是:\'event_type\'”

标签: node.js reactjs keen-io


【解决方案1】:

不,这在 Keen API 中是不允许的。 keen 命名空间是保留的,当写入事件时,只能在该命名空间中指定一小部分属性(例如 keen.timestampkeen.addons)。保留命名空间以允许 Keen 在将来添加新的特殊用途属性,而不必担心与用户定义的属性发生冲突。 (另见:https://keen.io/docs/api/#the-keen-object。)

也许值得退一步问:为什么要将自定义属性添加到keen 命名空间?它可以让你做你不能用my.keen.xkeen_custom.x 做的事情?

仅供参考:我是 Keen 的平台工程师 :)

【讨论】:

  • 我只是想在敏锐对象中添加自定义属性,因为我想在敏锐对象中添加一个名为 orig_id 的附加 id,除了 id 字段,并且 orig_id 值将从数据库中获取我正在使用。只是想知道它是否可能。
【解决方案2】:

var data = {
 "keen": {
  "created_at": "2012-12-14T20:24:01.123000+00:00",
  "timestamp": "2012-12-14T20:24:01.123000+00:00",
  "id": "asd9fadifjaqw9asdfasdf939",
 },
 "keen1": {
  "created_at": "2012-12-14T20:24:01.123000+00:00",
  "timestamp": "2012-12-14T20:24:01.123000+00:00",
  "id": "asd9fadifjaqw9asdfasdf939",
 },
 "keen2": {
  "created_at": "2012-12-14T20:24:01.123000+00:00",
  "timestamp": "2012-12-14T20:24:01.123000+00:00",
  "id": "asd9fadifjaqw9asdfasdf939",
 }
}
var newObj = {}
Object.keys(data).map((element)=> {
  var t = {
    ...data[element],
    "event_type" : "some_values",
  }
 newObj[element] = t
 return element
})
console.log(newObj)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.0/react-dom.min.js"></script>

这可能会有所帮助

【讨论】:

  • 必须添加 event_type 只为敬业,而不是敬业 1 和敬业 2。
【解决方案3】:

试试这样的

var keenEvent = {
 "keen": {
  "created_at": "2012-12-14T20:24:01.123000+00:00",
  "timestamp": "2012-12-14T20:24:01.123000+00:00",
  "id": "asd9fadifjaqw9asdfasdf939"
 }
};

keenEvent.keen.myNewProperty = "its value";
keenEvent.keen.myNewProperty2 = "its value2";

【讨论】:

  • 这样做会得到错误“敏锐命名空间的属性无效。您使用的是:\'event_type\'”
  • 您是否使用某种框架或架构来验证对象?
  • 对象被编码为: var encodedData = base64.encode(JSON.stringify(keen_event));并进一步传递了keen_api来创建一个事件。
  • 在应用该编码之前,keen_event 是一个 JavaScript 对象吗?
  • 此时您应该能够向对象添加任何属性。也许 if 会因为其他检查而失败
猜你喜欢
  • 2022-08-08
  • 2020-11-20
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 2023-03-24
相关资源
最近更新 更多