Correct JSON writing (Closes #596)

This commit is contained in:
Philipp Hagemeister 2012-12-20 13:13:24 +01:00
parent 3cc687d486
commit f4bfd65ff2
2 changed files with 15 additions and 3 deletions

View file

@ -454,9 +454,8 @@ class FileDownloader(object):
self.trouble(u'ERROR: No JSON encoder found. Update to Python 2.6+, setup a json module, or leave out --write-info-json.') self.trouble(u'ERROR: No JSON encoder found. Update to Python 2.6+, setup a json module, or leave out --write-info-json.')
return return
try: try:
with io.open(encodeFilename(infofn), 'w', 'utf-8') as infof: json_info_dict = dict((k, v) for k,v in info_dict.items() if not k in ['urlhandle'])
json_info_dict = dict((k, v) for k,v in info_dict.items() if not k in ['urlhandle']) write_json_file(json_info_dict, encodeFilename(infofn))
json.dump(json_info_dict, infof)
except (OSError, IOError): except (OSError, IOError):
self.trouble(u'ERROR: Cannot write metadata to JSON file ' + infofn) self.trouble(u'ERROR: Cannot write metadata to JSON file ' + infofn)
return return

View file

@ -3,6 +3,7 @@
import gzip import gzip
import io import io
import json
import locale import locale
import os import os
import re import re
@ -175,6 +176,18 @@ else:
assert type(s) == type(u'') assert type(s) == type(u'')
print(s) print(s)
# In Python 2.x, json.dump expects a bytestream.
# In Python 3.x, it writes to a character stream
if sys.version_info < (3,0):
def write_json_file(obj, fn):
with open(fn, 'wb') as f:
json.dump(obj, f)
else:
def write_json_file(obj, fn):
with open(fn, 'w', encoding='utf-8') as f:
json.dump(obj, f)
def htmlentity_transform(matchobj): def htmlentity_transform(matchobj):
"""Transforms an HTML entity to a character. """Transforms an HTML entity to a character.