python - 在键值迭代中从 json 中删除引号
问题描述
我想使用 pymongo 添加一些基于字典的用户,但是 pymongo 无法验证角色和数据库,因为我得到了带引号的值:
USERS = {
"topology": "{'role': 'readWrite', 'db': 'ui'},{'role': 'readWrite', 'db': 'linkage'},{'role': 'readWrite', 'db': 'metrics'},{'role': 'readWrite', 'db': 'migrations'},{'role': 'readWrite', 'db': 'state'},{'role': 'readWrite', 'db': 'storm'}",
"uiWriter": "{'role': 'readWrite', 'db': 'ui'}",
"reports": "{'role': 'readWrite', 'db': 'ui'}",
"dr": "{'role': 'clusterAdmin', 'db': 'admin'}",
"eventapi": "{'role': 'readWrite', 'db': 'dedup'},{'role': 'readWrite', 'db': 'lookup'}"
}
for k,v in USERS.items():
client = MongoClient(mongos,
username=mongo_admin_user,
password=mongo_admin_pass,
authSource='admin')
client.admin.add_user(k, mongo_key[k], roles=[v])
print({v})
如果我用括号打印值 print({v}) 引号是可见的。我尝试使用替换但不起作用。我还尝试用单引号更改双引号,但没有运气。如果我将值 roles=[{'role': 'readWrite', 'db': 'ui'}] 覆盖,它可以工作并验证。错误:
"errorMessage": "No role named {'role': 'readWrite', 'db':
解决方案
您需要一组 dicts 作为角色的值。所以可以试试这个。
>>> from ast import literal_eval
>>> roles_value = []
>>> for k,v in USERS.items():
... roles_value = list(literal_eval(v))
PS add_user 功能已弃用..
推荐阅读
- r - 加速加载闪亮的 UI
- javascript - 电子上传进度
- postgresql - Doobie 的 PostgreSQL 错误:PSQLException:列索引超出范围:3,列数:2
- c# - 在 Razor 中显示带有十进制值的文本框
- python - python GC是否保证是一个引用计数垃圾收集器
- flutter - 如何在颤动的页面中导航时修复appbar?
- java - 错误的字符集?Java 程序从 args[0] 获取损坏的字符串
- javascript - 如何在 Javascript 中扩展函数以添加新类型?
- javascript - 针对 localhost 进行测试时,赛普拉斯 API 请求中止
- django - 如何在 Django 中注册自定义过滤器