Obj-C 형식의 JSON 인코딩 문자열을 수신하고 아래 코드와 같이 더미 문자열 (현재)을 디코딩하고 있습니다. 내 출력에는 각 항목 앞에 문자 ‘u’가 있습니다.
[{u'i': u'imap.gmail.com', u'p': u'aaaa'}, {u'i': u'333imap.com', u'p': u'bbbb'}...
JSON은이 유니 코드 문자를 어떻게 추가합니까? 그것을 제거하는 가장 좋은 방법은 무엇입니까?
mail_accounts = []
da = {}
try:
s = '[{"i":"imap.gmail.com","p":"aaaa"},{"i":"imap.aol.com","p":"bbbb"},{"i":"333imap.com","p":"ccccc"},{"i":"444ap.gmail.com","p":"ddddd"},{"i":"555imap.gmail.com","p":"eee"}]'
jdata = json.loads(s)
for d in jdata:
for key, value in d.iteritems():
if key not in da:
da[key] = value
else:
da = {}
da[key] = value
mail_accounts.append(da)
except Exception, err:
sys.stderr.write('Exception Error: %s' % str(err))
print mail_accounts
답변
u- 접두사는 단지 유니 코드 문자열이 있음을 의미합니다. 실제로 문자열을 사용하면 데이터에 표시되지 않습니다. 인쇄 된 출력물에 버리지 마십시오.
예를 들어 다음을 시도하십시오.
print mail_accounts[0]["i"]
당신은 u를 볼 수 없습니다.
답변
모든 것이 멋지다. ‘u’는 좋은 것입니다. 파이썬 2.x에서 문자열이 유니 코드 유형임을 나타냅니다.
http://docs.python.org/2/howto/unicode.html#the-unicode-type
답변
d3
아래 의 인쇄는 당신이 찾고있는 것입니다 (덤프와로드의 조합입니다) 🙂
갖는 :
import json
d = """{"Aa": 1, "BB": "blabla", "cc": "False"}"""
d1 = json.loads(d) # Produces a dictionary out of the given string
d2 = json.dumps(d) # Produces a string out of a given dict or string
d3 = json.dumps(json.loads(d)) # 'dumps' gets the dict from 'loads' this time
print "d1: " + str(d1)
print "d2: " + d2
print "d3: " + d3
인쇄물:
d1: {u'Aa': 1, u'cc': u'False', u'BB': u'blabla'}
d2: "{\"Aa\": 1, \"BB\": \"blabla\", \"cc\": \"False\"}"
d3: {"Aa": 1, "cc": "False", "BB": "blabla"}
답변
u
프리픽스 수단 해당 문자열 유니보다는 8 비트 스트링임을. u
접두사를 표시하지 않는 가장 좋은 방법 은 문자열이 기본적으로 유니 코드 인 Python 3으로 전환하는 것입니다. 옵션이 아닌 경우 str
생성자는 유니 코드에서 8 비트로 변환되므로 결과를 반복적으로 반복하고로 변환 unicode
하면 str
됩니다. 그러나 문자열을 유니 코드로 그대로 두는 것이 가장 좋습니다.
답변
유니 코드는 적절한 유형입니다. JSONDecoder 문서는 변환 테이블을 설명하고 JSON 문자열 오브젝트가 유니 코드 오브젝트로 디코딩됨을 나타냅니다.
https://docs.python.org/2/library/json.html#encoders-and-decoders
JSON Python
==================================
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None
“인코딩은이 인스턴스에서 디코딩 된 str 객체를 해석하는 데 사용되는 인코딩을 결정합니다 (기본적으로 UTF-8).”
답변
객체에 추가되는 ‘u’문자는 객체가 “유니 코드”로 인코딩되었음을 나타냅니다.
객체에서 해당 ‘u’문자를 제거하려면 다음을 수행하십시오.
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars
파이썬 쉘에서 체크 아웃하자
>>> import json, ast
>>> jdata = [{u'i': u'imap.gmail.com', u'p': u'aaaa'}, {u'i': u'333imap.com', u'p': u'bbbb'}]
>>> jdata = ast.literal_eval(json.dumps(jdata))
>>> jdata
[{'i': 'imap.gmail.com', 'p': 'aaaa'}, {'i': '333imap.com', 'p': 'bbbb'}]
답변
logging
디버깅 및 문제 해결을 위해 Python 라이브러리 를 사용하여 로그에서 JSON 데이터를 캡처하려고 할 때이 문제가 계속 발생했습니다 . u
텍스트를 복사하여 코드 어딘가에 붙여 넣으려는 경우 문자를 얻는 것이 정말 번거 롭습니다.
모든 사람이 말했듯이, 이것은 유니 코드 표현이기 때문에 json.loads()
처음부터 문자열에서 데이터를로드 하는 데 사용한 사실에서 비롯된 것일 수 있습니다 .
u
접두사 없이 JSON 표시를 로그에 표시하려면 로그 json.dumps()
아웃하기 전에 사용 하는 것이 좋습니다. 예를 들면 다음과 같습니다.
import json
import logging
# Prepare the data
json_data = json.loads('{"key": "value"}')
# Log normally and get the Unicode indicator
logging.warning('data: {}'.format(json_data))
>>> WARNING:root:data: {u'key': u'value'}
# Dump to a string before logging and get clean output!
logging.warning('data: {}'.format(json.dumps(json_data)))
>>> WARNING:root:data: {'key': 'value'}