Python:json.loads返回以'u'为前缀的项目

我会收到一个JSON编码的stringformsObj-C,我正在解码一个虚拟string(现在)像下面的代码。 我的输出与每个项目前缀字符'u':

[{u'i': u'imap.gmail.com', u'p': u'aaaa'}, {u'i': u'333imap.com', u'p': u'bbbb'}... 

JSON如何添加这个Unicode字符? 删除它的最好方法是什么?

 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-前缀意味着你有一个Unicodestring。 当你真的使用这个string时,它不会出现在你的数据中。 不要被打印输出。

例如,试试这个:

 print mail_accounts[0]["i"] 

你不会看到你的。

一切都很酷,男人。 'u'是个好东西,它表明这个string在python 2.x中是Unicodetypes的。

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"} 

Unicode在这里是一个合适的types。 JSONDecoder文档描述了转换表和状态,jsonstring对象被解码为Unicode对象

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前缀表示这些string是unicode而不是8位string。 不显示u前缀的最好方法是切换到Python 3,默认情况下string是unicode。 如果这不是一个选项, str构造函数将从Unicode转换为8位,所以只需循环recursion结果并将unicode转换为str 。 但是,将string保留为unicode也许是最好的select。