Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 532
Joe Avatar asked Mar 16 '20 18:03

Joe


1 Answers

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

json.dump(dict(data), file)
like image 173
GordonAitchJay Avatar answered Nov 06 '22 21:11

GordonAitchJay