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

jan*_*neh 141 python json

我将收到一个JSON编码的字符串形式Obj-C,我正在解码一个虚拟字符串(现在),如下面的代码.我的输出带有每个项目前缀字符'u':

[{u'i': u'imap.gmail.com', u'p': u'aaaa'}, {u'i': u'333imap.com', u'p': u'bbbb'}...
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Ned*_*der 157

u-前缀只表示您有一个Unicode字符串.当您真正使用该字符串时,它不会出现在您的数据中.不要被打印输出抛出.

例如,试试这个:

print mail_accounts[0]["i"]
Run Code Online (Sandbox Code Playgroud)

你不会看到你.

  • 你的回答是我得到的最有用的,我认为这个问题的提问者会非常感激它:http://stackoverflow.com/questions/956867/how-to-get-string-objects-instead-of- Unicode的那些从 - JSON-中,蟒蛇 (4认同)

Ama*_*man 144

一切都很酷,伙计.'u'是一件好事,它表明字符串在python 2.x中是Unicode类型.

http://docs.python.org/2/howto/unicode.html#the-unicode-type

  • 我喜欢这个非常寒冷的语气.+1(正确)答案让我微笑. (69认同)
  • 这是我在StackOverflow上读到的最轻松的答案. (28认同)
  • 只是,冷静...(┛◉Д◉)┛彡┻━┻ (18认同)
  • ☮和平☮ (2认同)

Mer*_*ury 51

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
Run Code Online (Sandbox Code Playgroud)

打印:

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"}
Run Code Online (Sandbox Code Playgroud)

  • 但是如果你和json.loads一起使用它输出字典没有编码字符wihch是问题的答案(这是d3打印上面)读好答案! (10认同)
  • 咦?`json.dumps`将dict转换回(JSON编码的)字符串.这不是OP想做的事情.-1. (3认同)

jdi*_*jdi 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
Run Code Online (Sandbox Code Playgroud)

"encoding确定用于解释此实例解码的任何str对象的编码(默认为UTF-8)."


Abe*_*lus 7

u前缀意味着,这些字符串是unicode的,而不是8位的字符串.不显示u前缀的最佳方法是切换到Python 3,默认情况下字符串是unicode.如果那不是一个选项,str构造函数将从unicode转换为8位,因此只需在结果上递归循环并转换unicodestr.但是,最好只将字符串保留为unicode.


小智 5

那些附加在对象上的“ u”字符表示该对象以“ unicode”编码。

如果要从对象中删除那些“ u”字符,可以执行以下操作:

import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars
Run Code Online (Sandbox Code Playgroud)

让我们从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'}]
Run Code Online (Sandbox Code Playgroud)


jon*_*tan 5

当我尝试使用 Python 库捕获日志中的 JSON 数据logging以进行调试和故障排除时,我一直遇到这个问题。u当您想要复制文本并将其粘贴到代码中的某个位置时,获取字符确实很麻烦。

\n\n

json.loads()正如每个人都会告诉您的那样,这是因为它是 Unicode 表示形式,并且它可能来自于您\xe2\x80\x99 曾经用于首先从字符串加载数据的事实。

\n\n

如果您希望日志中的 JSON 表示形式不带前缀,则技巧是在将其注销之前u使用。json.dumps()例如:

\n\n
import json\nimport logging\n\n# Prepare the data\njson_data = json.loads(\'{"key": "value"}\')\n\n# Log normally and get the Unicode indicator\nlogging.warning(\'data: {}\'.format(json_data))\n>>> WARNING:root:data: {u\'key\': u\'value\'}\n\n# Dump to a string before logging and get clean output!\nlogging.warning(\'data: {}\'.format(json.dumps(json_data)))\n>>> WARNING:root:data: {\'key\': \'value\'}\n
Run Code Online (Sandbox Code Playgroud)\n