3

I am trying to create a json file from an input xml file using xmltodict with the following code

import io, xmltodict, json
infile = io.open(filename_xml, 'r')
outfile = io.open(filename_json, 'w')
o = xmltodict.parse( infile.read() )
json.dump( o , outfile )

the last line get me the following error

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 182, in dump
    fp.write(chunk)
TypeError: must be unicode, not str

I guess I need to change the encoding. My initial xml file seems to be ascii. Any idea on how to make this work? Thanks

2
  • which line gives the error? Commented Feb 6, 2013 at 8:46
  • the json.dump( o, outfile ) line Commented Feb 6, 2013 at 18:59

2 Answers 2

5

You can open the file in binary mode

outfile = io.open(filename_json, 'wb')

This will allow str as well.

Sign up to request clarification or add additional context in comments.

Comments

0

unicode and str are two different types of objects in Python prior to version 3. You can turn your value into a unicode object (which is basically also a string) by coercing it:

my_var = unicode(my_str)

3 Comments

Thanks for your answer. Where do you think I should use the unicode call?
Just looking at your code I'd say as json.dump(unicode(o), outfile), but you'll have to try that yourself :)
I don't have your libraries installed nor run OSX, but the error gives you a precise line number that triggers the error; maybe the code surrounding that line will shed some light on your issue.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.