从外部解析nbd.Key(urlsafe = string)

时间:2016-01-29 10:03:12

标签: python google-apps-script google-cloud-datastore google-cloud-platform

我更进一步。我正在使用python中使用nbd.Key()创建的密钥在Google Apps脚本中获得关键代表。

当我解码这个密钥时,我得到一组不完整的数据:

agxzfm92ZXItc2lnaHRyJwsSCEN1c3RvbWVyIghzeXNhZG1pbgwLEglDb25kaXRpb24YpJwBDA

当我将其转换回来时,我会获得可读的实体,但我会错过ID。这是base64decoded:

"js~over-sightr'Customer"sysadmin   Condition��"

有没有办法在不需要Python的情况下恢复所有内容?

旧帖子:

  

在Google Datastore中,一组分数会保存到DataStore中   nbd.jsonProperty。

     

我可以在Google Apps脚本中解析此问题,并获得一组数据。现在我   为每个元素找到以下结构:

[
 {"not_applicable":false,
  "key":"aghxxxxxxxxxxIUXVlc3Rpb24YgICAgPjChAoM",
  "given_score":0
 },
 ...
]
     

这里的关键,我可以base64decode。我看到我找到相关的   问题信息(关键点指向另一个实体)。它显示了一个

     

char + datastoreId + char + kind +?我希望密钥在这里?

     

执行,我怎样才能得到最后一部分? base64解码器给出了stange   最后一部分的字符,但我怀疑有ID作为   在那里的号码。

     

我正在使用Google Apps脚本。我可以从这个编码中获取此ID   串?我不能发布整个字符串,但是字节的最后部分   数组是[-128,-128,-128,-8,-62,-124,10,12],我怀疑这个   代表ID。

     

任何想法或经验?

1 个答案:

答案 0 :(得分:0)

URLSafe密钥(特定于Python客户端库)是实体密钥的内部protobuf v1表示的Base64编码版本。它不是为外部解码而设计的。

我不认为Apps Script有一种简单的方法来使用protobuf消息,但理论上你可以通过查看NDB实现并理解Protocol Buffers如何编码数据来实现它。