2014-06-09 2 views
1

JSON으로 변환해야하는 복잡한 구조가 있습니다. 일반적으로,이 괜찮지 만, 가끔,이 같은 잘못된 데이터를 얻을 수 있습니다 :구조체의 모든 문자열에 함수 적용

{'FIRST_NAME': 'sdffg\xed', 'LAST_NAME': 'sdfsadf', 'MORE_INFO':['hi','blah', {'key1': 'value1'}]} 

간단한 json.dumps(data) 나에게 제공합니다 json.dumps(data, ensure_ascii=False)를 수행

UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 6: ordinal not in range(128) 

으로.

utf-8에서 읽을 수없는 데이터가있는 경우 무시하고 싶습니다. 내가 원하는 것을 얻으려는 유일한 방법은 다음과 같습니다.

item.decode("utf8", "ignore") if item else None 

구조의 모든 단일 항목. 그렇다면 다음 중 하나입니까?

  1. json.dumps() (선호) 내에서 어떻게해야합니까?
  2. 이 문자열 함수를 모든 문자열에만 적용하고 복잡한 구조의 문자열 만 균일하게 적용하는 방법은 무엇입니까? 모든 여분의 문자를 사용하여 예처럼 latin-1을 경우
+0

'json.dumps (unicode (d, "utf-8", errors = "ign 광석 "))'직장? –

+0

@PadraicCunningham은 예제에서 MORE_INFO와 같은 하위 수준이있을 때 중단됩니다. – Eli

+0

큰 예를 들어 줄 수 있습니까? –

답변

0

:

json.dumps(d, ensure_ascii=False,encoding="latin-1") 

당신에게 비 아스키 문자를 제거하려면 올바른 출력

{"FIRST_NAME": "sdffgí", "LAST_NAME": "sdfsadf", "MORE_INFO": ["hi", "blah"]} 

을 줄 것이다 당신은 사용할 수 있습니다

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']} 
+0

그것은 단지 예일뿐입니다. 인코딩은 무엇이든 될 수 있습니다. – Eli