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

2025-02-21 08:50:00
admin
原创
6
摘要:问题描述:我将从Objective-C接收 JSON 编码的字符串,并且我正在解码一个虚拟字符串(目前),如下面的代码所示。我的输出是在每个项目前面加上字符“u”:[{u'i': u'imap.gmail.com', u'p': u'aaaa'}, {u'i': u'333imap.com', u'p': 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 如何添加此 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

解决方案 1:

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

例如,尝试这个:

print mail_accounts[0]["i"]

您不会看到 u。

解决方案 2:

一切都很酷,伙计。'u' 是个好东西,它表示字符串在 python 2.x 中属于 Unicode 类型。

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

解决方案 3:

下面的打印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"}

解决方案 4:

附加到对象上的“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'}]

解决方案 5:

Unicode 是此处合适的类型。JSONDecoder 文档描述了转换表,并指出 JSON 字符串对象被解码为 Unicode 对象。

来自18.2.2.编码器和解码器

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)。”

解决方案 6:

前缀u表示这些字符串是 unicode 而不是 8 位字符串。不显示u前缀的最佳方法是切换到 Python 3,其中字符串默认为 unicode。如果这不是一个选项,str构造函数将从 unicode 转换为 8 位,因此只需对结果进行递归循环并转换unicodestr。但是,最好将字符串保留为 unicode。

解决方案 7:

logging当我尝试使用 Python库捕获日志中的 JSON 数据以进行调试和故障排除时,我总是遇到这个问题。u当您想要复制文本并将其粘贴到代码中的某个地方时,获取字符是一件非常麻烦的事情。

json.loads()每个人都会告诉你,这是因为它是一种 Unicode 表示,而且它可能来自于你首先习惯从字符串中加载数据的事实。

如果您希望日志中的 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'}

解决方案 8:

尝试一下:

mail_accounts[0].encode("ascii")

解决方案 9:

只需用单引号替换 u'...

print (str.replace(mail_accounts,"u'","'"))
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1267  
  IPD(Integrated Product Development)即集成产品开发,是一套先进的、成熟的产品开发管理理念、模式和方法。随着市场竞争的日益激烈,企业对于提升产品开发效率、降低成本、提高产品质量的需求愈发迫切,IPD 项目管理咨询市场也迎来了广阔的发展空间。深入探讨 IPD 项目管理咨询的市场需求与发展,...
IPD集成产品开发流程   27  
  IPD(Integrated Product Development)产品开发流程是一套先进的、被广泛应用的产品开发管理体系,它涵盖了从产品概念产生到产品推向市场并持续优化的全过程。通过将市场、研发、生产、销售等多个环节紧密整合,IPD旨在提高产品开发的效率、质量,降低成本,增强企业的市场竞争力。深入了解IPD产品开发...
IPD流程中TR   31  
  IPD(Integrated Product Development)测试流程是确保产品质量、提升研发效率的关键环节。它贯穿于产品从概念到上市的整个生命周期,对企业的成功至关重要。深入理解IPD测试流程的核心要点,有助于企业优化研发过程,打造更具竞争力的产品。以下将详细阐述IPD测试流程的三大核心要点。测试策略规划测试...
华为IPD   26  
  华为作为全球知名的科技企业,其成功背后的管理体系备受关注。IPD(集成产品开发)流程作为华为核心的产品开发管理模式,在创新管理与技术突破方面发挥了至关重要的作用。深入剖析华为 IPD 流程中的创新管理与技术突破,对于众多企业探索自身发展路径具有重要的借鉴意义。IPD 流程概述IPD 流程是一种先进的产品开发管理理念和方...
TR评审   26  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用