我将收到一个JSON编码的字符串形式Obj-C,我正在解码一个虚拟字符串(现在),如下面的代码。我的输出结果是每个项目前面加上字符'u':
[{u'i': u'imap.gmail.com', u'p': u'aaaa'}, {u'i': u'333imap.com', u'p': u'bbbb'}...
JSON如何添加这个unicode char?删除它的最佳方法是什么?
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
答案 0 :(得分:149)
u-前缀只表示您有一个Unicode字符串。当您真正使用该字符串时,它不会出现在您的数据中。不要被打印输出抛出。
例如,试试这个:
print mail_accounts[0]["i"]
你不会看到你。
答案 1 :(得分:139)
一切都很酷,伙计。 'u'是一件好事,它表明字符串在python 2.x中是Unicode类型。
http://docs.python.org/2/howto/unicode.html#the-unicode-type
答案 2 :(得分:45)
下面的 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"}
答案 3 :(得分:8)
Unicode是一种合适的类型。 JSONDecoder文档描述了转换表,并声明json字符串对象被解码为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
“encoding确定用于解释此实例解码的任何str对象的编码(默认情况下为UTF-8)。”
答案 4 :(得分:7)
u
前缀表示这些字符串是unicode而不是8位字符串。不显示u
前缀的最佳方法是切换到Python 3,默认情况下字符串是unicode。如果这不是一个选项,str
构造函数将从unicode转换为8位,因此只需在结果上递归循环并将unicode
转换为str
。但是,最好将字符串保留为unicode。
答案 5 :(得分:5)
那些附加到对象上的'u'字符表示该对象以“ unicode”编码。
如果要从对象中删除那些“ u”字符,可以执行以下操作:
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars
让我们从python shell签出
>>> 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'}]
答案 6 :(得分:2)
当尝试使用Python logging
库在日志中捕获JSON数据时,出于调试和故障排除的目的,我一直遇到这个问题。当您想复制文本并将其粘贴到代码中的某个位置时,获得u
字符确实是个麻烦。
每个人都会告诉您,这是因为它是Unicode表示,并且可能是由于您首先使用json.loads()
从字符串中加载数据的事实。
如果您想在日志中使用JSON表示形式,但不使用前缀u
,则诀窍是在注销之前使用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'}
答案 7 :(得分:1)
尝试一下:
mail_accounts [0] .encode(“ ascii”)
答案 8 :(得分:0)
只需用单引号替换u'...
php artisan schedule:run