我试着阅读文档here并按照答案here操作,但都不起作用。
下面是我放入数据存储中的内容:
{'a': 'b', 'c': {'d': 'f'}}如果我查询它,我会得到:
<Entity('MyKind', 1232141232id) {'a': 'b', 'c': <Entity {'d': 'f'}>}>我使用的是google-cloud-python (文档中的recommended ),而不是ndb,所以我不能使用:
from google.appengine.ext import db
db.to_dict(entity)如果我尝试强制转换dict(results[0]),我会得到:
{'a': 'b', 'c': <Entity {'d': 'f'}>}^^除了嵌套的实体之外,这几乎就是我需要的。
有什么建议是最好的方法吗?似乎会有一个函数来处理这个问题,但我就是找不到。
发布于 2019-12-31 08:07:16
到目前为止,我找到的最好的解决方案是this,但不确定这是否会打破任何边缘情况。
import json
json.loads(json.dumps(data), parse_int=str)发布于 2020-01-07 01:52:08
因此,Entity本身继承自dict,只在顶部添加了几个函数
https://googleapis.dev/python/datastore/latest/_modules/google/cloud/datastore/entity.html#Entity
您的json解决方案可能很好,但这取决于目标是什么。如果您最终只是尝试转换为json,那么它应该没问题,但您并没有捕获entity.key,这可能是您想要的。另外,我认为对于datetime对象和外键,除非您以某种方式显式地处理它们,否则json将失败。
您可能需要像这样构建一个util函数:
def _coerce_value(v):
if isinstance(v, Entity):
return_value[k] = entity_to_dict(v)
elif isinstance(v, Key):
return v.id # or do something else here
return v
def entity_to_dict(entity):
return_value = {}
if entity.key:
return_value['key'] = _coerce_value(entity.key)
for k, v in entity.iteritems():
if isinstance(v, list): # handle repeated properties
return_value[k] = [_coerce_value(i) for i in v]
else:
return_value[k] = _coerce_value(v)
return return_valuehttps://stackoverflow.com/questions/59538154
复制相似问题