【问题标题】:ndb.key() -> do this with Javascriptndb.key() -> 使用 Javascript 执行此操作
【发布时间】:2016-05-13 05:40:57
【问题描述】:

在我的应用程序中,我获得了在 Python 系统中构建的密钥,并写入 Google 数据存储区。

为了匹配数据,我需要这些项目的 ID,它们在 'key' 字符串中。

由于没有 Python,我无法执行 key.id(),我需要使用 JavaScript / Google Apps 脚本手动“解码”它。

这可能吗?

key = Key(urlsafe=url_string)
kind_string = key.kind()
ident = key.id()

【问题讨论】:

  • 一开始你是如何将密钥输入到你的 javascript 中的?
  • 我使用 REST 从 Google 数据存储中获取它。它作为 JSON-blob 对象保存在那里,我对其进行解码和解析。此对象包含作为参考的键字符串,但我不能直接使用它们。
  • 但是datastore JSON API 应该已经给你解码的密钥了。
  • 不是真的,在这种情况下不是。我实际上从数据存储中得到的是一个字符串化的二进制版本。我无法控制其中保存的内容,因为它是一个不同的应用程序存储它,我只能读取数据。 (当我对该密钥进行base64解码时,我可以识别实体,但ID有奇怪的字符) [ { "not_applicable": false, "key": "aghlfmFoLXdibxxxxxxxxxxxVlc3Rpb24YgICAgPjChAoM", "given_score": 0 }, { "not_applicable": true , "key": "aghlfmFoLXdibxxxxxxxxxxxxlc3Rpb24YgICAgIDkkQoM", "given_score": 0 } 等
  • 嗯,解码后的字符串实际上是定义密钥的 Protocol Buffer 类的序列化表示(Google 内部几乎所有东西都使用 protobufs)。如果不找到大量第三方库,您将无法轻松地使用 JS 提取数据。最好让提供此数据的应用程序以更容易解码的形式发送它。

标签: javascript python google-app-engine google-cloud-datastore app-engine-ndb


【解决方案1】:

简短的回答,不。更长的答案,并非没有大量工作。 @danielroseman 在他的 cmets 中很好地解释了这一点。

通常,密钥应保留在服务器上,因为它们仅对 ndb 有用。您可以传递 id = key.id() 值以使用 new_key = ndb.Key(Model, id) 构造新密钥。

如果您必须传递密钥,请使用safe_key = key.urlsafe() 并使用ndb.Key(urlsafe=safe_key) 重构它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-01
    • 2012-12-25
    • 1970-01-01
    • 2019-07-24
    • 2014-02-17
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多