python - 返回 postgres 查询时 Psycopg2 无效的 json
问题描述
我正在使用 Django 访问我的 postgres 数据库中的存储函数。当我在 Postgres 中执行函数时,它返回双引号和有效的 json。但是,当我从 Django(使用 psycopg2)调用该函数时,双引号被删除,单引号替换它们。
似乎 psycopg2 正在后台对列表/字典进行某种类型的转换。但是,我需要保留 json。任何想法如何解决这个问题?
解决方案
您可以通过注册无操作函数来覆盖 psycopg2 自动转换 JSON 对象/数组的功能register_default_json()
psycopg2.extras.register_default_json(loads=lambda x: x)
从文档中引用
Psycopg 自动将 PostgreSQL json 数据转换为 Python 对象。我怎样才能收到字符串呢?避免 JSON 解析的最简单方法是使用 register_default_json() 注册一个无操作函数:
psycopg2.extras.register_default_json(loads=lambda x: x) 有关详细信息,请参阅 JSON 改编。
附加阅读
- http://initd.org/psycopg/docs/extras.html#adapt-json
- https://docs.djangoproject.com/en/2.2/ref/contrib/postgres/fields/#jsonfield(不确定你想用存储的函数做什么,但这可能有助于减轻对一个函数的需求)
推荐阅读
- vb.net - txtBoxes 列表 - System.NullReferenceException:
- python - 如何创建一个包含文件中每一行的第一个单词的列表(Python 3)
- dji-sdk - DJI Windows SDK 示例 - 无法查看 FPV 模式
- listview - ListView with a progress bar populated by Model property
- python - 正确导入模块,暴露功能进行打包开发
- python - 使用 DataLoader 从 CSV 加载数据
- go - 解组到结构时从 JSON 转换值
- regex - 如何在此特定文本上使用正则表达式捕获多个单词?
- python-3.x - 有没有什么方法可以在不使用任何 API(谷歌、谷歌云、IBM 等)的情况下在 python 中将音频转换为文本(语音识别)
- javascript - Protractor: How to correcly set an expectation getText() of each function?