jsonpython-3.xdictionaryldap3

Python3 Convert 'CaseInsensitiveDict' to JSON


I am working on what I assumed would be a simple problem but it has really confused. I am making an AD query in Python using the ldap3 module. This query is returning the data as generator of python dictionaries. When I run the type() command against the data it confirms that it is a dictionary.

I need to convert this into JSON so that I can write it to a log file. First, I tried json.dump(data, file) but when I do that I receive this error: TypeError: Object of type 'CaseInsensitiveDict' is not JSON serializable

If I try and convert the dictionary to a string first the data is written with quotes and inner fields are left with single quotes so it isn't true JSON - it comes out looking like this: "{'key': 'value'}"

Here is what I have:

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

I have been searching the interwebs and I see a lot about this issue with the requests module but nothing that seems to fix my situation.

With the ldap3 module there is a method entry_to_json() which I used in other scripts. It doesn't seem to work here because of the generator, if anyone knows how to make that work again it could solve my problem. Thoughts?


Solution

  • Try transforming the CaseInsensitiveDict to a plain old dict, like so:

    json.dump(dict(data), file)