将函数应用于结构中的所有字符串

时间:2014-06-09 09:17:37

标签: python json utf-8 decode

我有一些复杂的结构需要转换为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

在结构中的每个项目上。那么,是否有:

  1. json.dumps()(首选)中执行此操作的方法?
  2. 一种将此字符串函数统一应用于所有字符串并且只对某些复杂结构中的字符串应用的方法吗?

1 个答案:

答案 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']}