我有一些复杂的结构需要转换为JSON。通常,这很好,但有时,我会得到这样的错误数据:
{'FIRST_NAME': 'sdffg\xed', 'LAST_NAME': 'sdfsadf', 'MORE_INFO':['hi','blah', {'key1': 'value1'}]}
简单json.dumps(data)
给了我:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 6: ordinal not in range(128)
与json.dumps(data, ensure_ascii=False)
一样。
如果在utf-8中数据不可读,我只是想忽略它。我能找到得到我想要的唯一方法就是:
item.decode("utf8", "ignore") if item else None
在结构中的每个项目上。那么,是否有:
json.dumps()
(首选)中执行此操作的方法?答案 0 :(得分:0)
如果你的例子中的所有额外字符都是latin-1
,请使用:
json.dumps(d, ensure_ascii=False,encoding="latin-1")
会给你正确的输出
{"FIRST_NAME": "sdffgí", "LAST_NAME": "sdfsadf", "MORE_INFO": ["hi", "blah"]}
要删除非ascii字符,您可以使用:
d1 = json.dumps(d,ensure_ascii = False)
print (json.loads(re.sub(r'[^\x00-\x7F]','', d1))))
{u'FIRST_NAME': u'sdffg', u'LAST_NAME': u'sdfsadf', u'MORE_INFO': [u'hi', u'blah']}