gpt4 book ai didi

python - CouchDB urlencode Python

转载 作者:行者123 更新时间:2023-11-30 23:35:29 27 4
gpt4 key购买 nike

我的问题是我必须对字典进行编码才能进行 couchdb 设计:

我有这个字典:

params = {'descending': 'true', 'startkey': 'Mexico', 'endkey': 'Mexico'}

我想要一个像这样的网址:

http://localhost:5984/hello-world/_design/precios/_view/precios?descending=true&startkey=%22Mexico%22&endkey=%22Mexico%22

或者像这样:

http://localhost:5984/hello-world/_design/precios/_view/precios?descending=true&startkey="Mexico"&endkey="Mexico"

所以我使用urllib.urlencode将字典转换为查询字符串:

urllib.urlencode(params)

这个返回给我类似:

http://localhost:5984/hello-world/_design/precios/_view/precios?descending=true&startkey=Mexico&endkey=Mexico

所以这是 CouchDB 的无效 URL,因为 CouchDB 需要在 startkeyendkey 中使用双引号

如果我将我的字典更改为:

params = {'descending': 'true', 'startkey': '"Mexico"', 'endkey': '"Mexico"'}

这会返回一个有效的 URL,如下所示:

http://localhost:5984/hello-world/_design/precios/_view/precios?descending=true&startkey=%22Mexico%22&endkey=%22Mexico%22

但是我不想在单引号内传递双引号,有没有办法可以返回有效的 URL?

感谢您的回答:D

最佳答案

Couch 参数值是 JSON 文字,因此应通过对值进行 JSON 编码来创建。 然后您需要对结果进行 URL 编码以适应标准 URL。

示例:

import urllib, json
def to_json_query(params):
return urllib.urlencode({p: json.dumps(params[p]) for p in params})

>>> qs = to_json_query({'descending': True, 'startkey': 'Mexico', 'endkey': 'Mexico'})
'startkey=%22Mexico%22&endkey=%22Mexico%22&descending=%22true%22'

注意,我已将 descending 的值更改为 bool 值 True,因为您需要 JSON bool 值 true 而不是字符串 “true”

(这里的现有答案假设字符串并且不进行 URL 编码 JSON 编码,因此对于任何 JSON 特殊或 URL 特殊字符、任何非 ASCII 或非 -字符串数据类型。)

关于python - CouchDB urlencode Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17264883/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com