开发者社区 问答 正文

Python3将'CaseInsensitiveDict'转换为JSON

我正在研究我认为将是一个简单问题的方法,但确实感到困惑。我正在使用ldap3模块在Python中进行广告查询。此查询返回的数据作为python词典的生成器。当我对数据运行type()命令时,它确认它是一个字典。

我需要将其转换为JSON,以便可以将其写入日志文件。首先,我尝试了json.dump(data,file),但是当我这样做时,我收到此错误:TypeError:类型为'CaseInsensitiveDict'的对象不是JSON可序列化的

如果我尝试将字典转换为字符串,则首先用引号将数据写入,而内部字段则用单引号引起,因此它不是真正的JSON-看起来像这样:“ {'key':'value' }“

这是我所拥有的:

with open(outfile, 'w') as outfile:
    for entry in entry_generator: # Entry is equal to a dictionary of AD attributes
        json.dump(entry, outfile) # I have also tried json.dump(str(entry), outfile) etc

我一直在搜索互连网,并且使用request模块可以看到很多关于此问题的信息,但似乎没有什么可以解决我的问题。

有了ldap3模块,就有了一个我在其他脚本中使用过的方法entry_to_json()。由于生成器,它似乎在这里不起作用,如果有人知道如何再次执行该工作,则可以解决我的问题。有什么想法吗?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-23 18:55:18 2360 分享 版权
1 条回答
写回答
取消 提交回答
  • 尝试将CaseInsensitiveDict转换为普通的旧dict,如下所示:

    json.dump(dict(data), file)
    

    如果存在嵌套的CaseInsensitiveDict,则此方法不起作用。您必须从内到外将它们递归地转换为dict。

    回答来源:stackoverflow

    2020-03-23 18:55:25
    赞同 展开评论