I got the following json: {u'a': u'aValue', u'b': u'bValue', u'c': u'cValue'} by doing request.json in my python code. Now, I want to convert the unicode json to normal json, something which should like this: {"a": "aValue", "b": "bValue", "c": "cValue"}. How do I get this done, without having to do any manual replacements? Please help.
-
Possible Duplicate of Python: json.loads returns items prefixing with 'u'Bhargav Rao– Bhargav Rao2016-04-30 11:49:09 +00:00Commented Apr 30, 2016 at 11:49
-
Whty is this bothering you?timgeb– timgeb2016-04-30 11:49:21 +00:00Commented Apr 30, 2016 at 11:49
-
Has been asked many times, Did you research? How to get string objects instead of Unicode ones from JSON in Python?Bhargav Rao– Bhargav Rao2016-04-30 11:50:39 +00:00Commented Apr 30, 2016 at 11:50
4 Answers
{u'a': u'aValue', u'b': u'bValue', u'c': u'cValue'} is a dictionary which you are calling as unicode json. Now, in your language if you want a regular json from this then just do something like this:
x={u'a': u'aValue', u'b': u'bValue', u'c': u'cValue'}
y=json.dumps(x)
print y
The output will be {"a": "aValue", "c": "cValue", "b": "bValue"}
2 Comments
import jsonFor python 2.x
import yaml
import json
json_data = yaml.load(json.dumps(request.json()))
Now this json_data can be used as a json and can have list of json as well.
1 Comment
You can use a list comprehension to encode all of the keys and values as ascii like this:
dict([(k.encode('ascii','ignore'), v.encode('ascii','ignore')) for k, v in dct.items()])
Note: There generally isn't much benefit to not having your data in unicode, so unless you have a specific reason not to have it in unicode, then I would leave it.
Comments
A library available in PyPi may be helpful, see: unidecode.
It is intended to transform European characters with diacriticals (accents) to their base ASCII characters, but it does just as well when the unicode character is already in the ASCII range.
from unicode import unidecode
def fUnUn(sOrU):
return unidecode(sOrU).encode('ascii') if type(sOrU) is unicode else sOrU
sASCII = fUnUn(u'ASCII')