python - 将嵌套数据存储实体转换为 Python 字典的最简单方法是什么?
问题描述
这是我放入数据存储区的内容:
{'a': 'b', 'c': {'d': 'f'}}
如果我查询它,我会得到:
<Entity('MyKind', 1232141232id) {'a': 'b', 'c': <Entity {'d': 'f'}>}>
我正在使用google-cloud-python(在文档中推荐)而不是ndb所以我不能使用:
from google.appengine.ext import db
db.to_dict(entity)
如果我尝试投射,dict(results[0])
我会得到:
{'a': 'b', 'c': <Entity {'d': 'f'}>}
^^ 这几乎是我需要的,除了嵌套实体。
任何建议最好的方法来做到这一点?似乎会有一个功能,但我找不到它。
解决方案
所以Entity
它本身继承自dict
并只在上面添加了几个函数
https://googleapis.dev/python/datastore/latest/_modules/google/cloud/datastore/entity.html#Entity
您的json
解决方案可能很好,但这取决于目标是什么。如果您最终只是想转换为 json,那应该没问题,但是您没有捕获entity.key
,也许这就是您想要的。我也认为对象和外键json
会失败,datetime
除非你以某种方式明确处理它们。
您可能需要像这样构建一个 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_value
推荐阅读
- ios - 如何修复 Xcode 中的未定义符号错误?
- scala - 两种读取 hdfs 序列文件的方法,但一种失败并出现 EOFException
- javascript - 将图像文件保存到 firebase / 将图像文件数据保存到纯 javascript 对象中
- wordpress - Elementor 中的 ACF 组内容?
- python - 将金额 (int) 转换为 BCD
- tsql - DAX 表达式从表中隔离 2 列并根据另一列过滤结果表
- ios - Firebase 远程配置何时在 iOS 上加载以接收 A/B 测试变体
- javascript - javascript的窗口宽度条件
- arcgis - 是否可以更改 ArcGIS API 中弹出模板中显示的折叠表?
- python - 如何绘制离散线而不是条形?