Created
September 26, 2018 17:05
-
-
Save josephcoombe/ff18f1aa655caec36377a8568b6533e6 to your computer and use it in GitHub Desktop.
Python: Get str objects instead of Unicode from JSON
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
# Python: Get str objects instead of Unicode from JSON | |
# using object_hook | |
# | |
# Taken from: | |
# Source: https://stackoverflow.com/a/33571117 | |
import json | |
def json_load_byteified(file_handle): | |
return _byteify( | |
json.load(file_handle, object_hook=_byteify), | |
ignore_dicts=True | |
) | |
def json_loads_byteified(json_text): | |
return _byteify( | |
json.loads(json_text, object_hook=_byteify), | |
ignore_dicts=True | |
) | |
def _byteify(data, ignore_dicts=False): | |
# if this is a unicode string, return its string representation | |
if isinstance(data, unicode): | |
return data.encode('utf-8') | |
# if this is a list of values, return list of byteified values | |
if isinstance(data, list): | |
return [_byteify(item, ignore_dicts=True) for item in data] | |
# if this is a dictionary, return dictionary of byteified keys and values | |
# but only if we haven't already byteified it | |
if isinstance(data, dict) and not ignore_dicts: | |
return { | |
_byteify(key, ignore_dicts=True): _byteify(value, ignore_dicts=True) | |
for key, value in data.iteritems() | |
} | |
# if it's anything else, return it in its original form | |
return data |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment