首页 > 解决方案 > 在键值迭代中从 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':

标签: pythonpymongo

解决方案


您需要一组 dicts 作为角色的值。所以可以试试这个。

>>> from ast import literal_eval
>>> roles_value = []
>>> for k,v in USERS.items():
...     roles_value = list(literal_eval(v))

PS add_user 功能已弃用..


推荐阅读