Python: json.loads는 'u'가 붙은 항목을 반환합니다.
Objective-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-prefix는 Unicode 문자열이 있음을 의미합니다.문자열을 실제로 사용하면 데이터에 표시되지 않습니다.인쇄된 출력물에 놀라지 마세요.
예를 들어 다음과 같습니다.
print mail_accounts[0]["i"]
당신은 당신을 볼 수 없어요.
다 괜찮아, 친구.'u'는 좋은 것으로, 문자열이 python 2.x의 Unicode 유형임을 나타냅니다.
http://docs.python.org/2/howto/unicode.html#the-unicode-type
다음 인쇄물은 찾으시는 인쇄물입니다(덤프와 로드의 조합).
다음 중 하나:
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' 문자는 개체가 유니코드로 인코딩되었음을 나타냅니다.
개체에서 이러한 'u'자를 제거하려면 다음을 수행합니다.
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars
python 쉘에서 체크 아웃하자
>>> 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'}]
여기서 유니코드가 적절한 유형입니다.JSONDecoder 문서에서는 변환 테이블과 JSON 문자열 개체가 Unicode 개체로 디코딩되는 상태에 대해 설명합니다.
JSON Python
==================================
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None
"encoding은 이 인스턴스에서 디코딩된 스트링 오브젝트를 해석하는 데 사용되는 인코딩을 결정합니다(기본적으로는 UTF-8).
그uprefix는 이러한 문자열이 8비트 문자열이 아닌 Unicode임을 의미합니다.가장 좋은 방법으로는uprefix는 Python 3으로 전환하는 것입니다.여기서 문자열은 기본적으로 Unicode입니다.그게 선택사항이 아니라면str컨스트럭터는 Unicode에서8비트로 변환되기 때문에 결과를 재귀적으로 반복하여 변환하기만 하면 됩니다.unicode로.str단, 문자열은 유니코드 그대로 두는 것이 좋습니다.
Python으로 로그에 JSON 데이터를 캡처하려고 할 때 이 문제가 계속 발생하였습니다.logging라이브러리, 디버깅 및 트러블 슈팅용으로 사용합니다.입수 방법u텍스트를 복사하여 코드에 붙여넣고 싶을 때 문자는 정말 성가신 존재입니다.
모두가 말하듯이, 이것은 유니코드 표현이기 때문입니다.또한 이 표현은 유니코드를 사용한 적이 있기 때문입니다.json.loads()첫 번째 위치에 문자열에서 데이터를 로드합니다.
JSON 는, JSON 를 하지 않고,uprefix를 사용하는 입니다.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'}
이것을 시험해 보세요.
mail_accounts[0].encode("ascii")
u'를 하나의 따옴표로 대체하면...
print (str.replace(mail_accounts,"u'","'"))
언급URL : https://stackoverflow.com/questions/13940272/python-json-loads-returns-items-prefixing-with-u
'sourcecode' 카테고리의 다른 글
| Woocommerce Ajax가 프로그래밍 방식으로 카트에 추가 (0) | 2023.02.07 |
|---|---|
| 태그 패널을 커스텀 투고 타입으로 표시 (0) | 2023.02.07 |
| Wordpress(3.8) 관리 UI 스타일 CSS 클래스 (0) | 2023.02.07 |
| Wordpress 관리자 페이지에 템플릿 드롭다운이 표시되지 않음 (0) | 2023.02.07 |
| WooCommerce 프런트엔드 Javascript 재정의 (0) | 2023.02.07 |