使用请求库后,我在response.json()
下面的dict{u'xyz': {u'key1': None, u'key2': u'Value2'}}
我想删除所有unicode字符并仅打印没有unicode字符的键值对
我已经尝试过以下方法删除,但它显示格式错误的字符串
>>> import json, ast
>>> c = {u'xyz': {u'key1': None,u'key2': u'Value2'}}
>>> ast.literal_eval(json.dumps(c))
获取' ValueError:格式错误的字符串'
有关如何做的任何建议吗?
答案 0 :(得分:3)
将您的无更改为'无':
c = {u'xyz': {u'key1': 'None', u'key2': u'Value2'}}
这是一个投射问题 - 非常喜欢str的
另外,也许你想要将所有None改为空str或'None'str ... 看到这个帖子: Python: most idiomatic way to convert None to empty string? 使用此代码,我将空字符串更改为“无”:
def xstr(s):
if s is None:
return 'None'
return str(s)
答案 1 :(得分:1)
您可以使用unicodestring.encode("ascii","replace")
>>> ustr=u'apple'
>>> ustr
u'apple'
>>> astr=ustr.encode("ascii","replace")
>>> astr
'apple'
答案 2 :(得分:1)
此代码段将帮助您保留没有Unicode前缀表示法u
的数据:
>>> import json
>>> c = {u'xyz': {u'key1': u'Value1',u'key2': u'Value2'}}
>>> print c
{u'xyz': {u'key2': u'Value2', u'key1': u'Value1'}}
>>> d = eval(json.dumps(c))
>>> print d
{'xyz': {'key2': 'Value2', 'key1': 'Value1'}}
json.dumps()将字典转换为字符串类型,而eval()将其转换为字符串类型。
注意:出于测试目的,key1值已从“无”更改为“ value1”
答案 3 :(得分:0)
我真的不明白你为什么要这样。你的变量是一个普通的Python字典,带有普通的Unicode字符串,它们碰巧打印成u''
,以区别于字节串,但这对于使用它们无关紧要。
如果你想将它们保存为字符串以便以后将它们作为数据读取,那么JSON就是一种很好的格式。所以根本不需要调用请求的.json()
函数,只需使用响应的.text
属性 - 毕竟它已经是JSON了。
你的尝试
>>> ast.literal_eval(json.dumps(c))
失败是因为您首先将c
再次转换为JSON,然后尝试将其解析为Python文字。这不起作用,因为Python不是JSON;特别是一个有null
而另一个有None
。
所以也许你想把Unicode字符串改成字节串?就像将它们编码为UTF8一样,这可能有效:
def to_utf8(d):
if type(d) is dict:
result = {}
for key, value in d.items():
result[to_utf8(key)] = to_utf8(value)
elif type(d) is unicode:
return d.encode('utf8')
else:
return d
或类似的东西,但我不知道你为什么需要它。