<p>它仍在打印<code>u</code>,因为对象中有<em><code>unicode</code>对象</em>的元素,这就是python打印包含unicode对象的对象的方式。你知道吗</p>
<pre><code>>>> x = {u'giga-10': [u'overview']}
>>> print x
{u'giga-10': [u'overview']}
</code></pre>
<p>有<code>unicode</code>对象是有意义的,因为您正在反序列化JSON,而对应于JSON字符串的适当数据结构是python2 <code>unicode</code>对象。你知道吗</p>
<p>注意,如果打印<code>unicode</code>对象,它不会打印<code>u</code>,因为<code>u</code>实际上不是unicode字符串的一部分:</p>
<pre><code>>>> print u"hello"
hello
</code></pre>
<p>这真的不重要。你应该让它不再困扰你。但是如果出于某种疯狂的原因坚持要摆脱这些<code>u</code>类型,那么就必须将从JSON反序列化的任意对象中的任何unicode对象转换为<code>str</code>类型。这需要<em>解码</em>unicode对象。只要您没有提供任何钩子,以下内容应该适用于<code>json.load</code>的任何结果:</p>
<pre><code>>>> def stringify(obj):
... if isinstance(obj, unicode):
... return obj.encode('utf8')
... elif isinstance(obj, list):
... return [stringify(x) for x in obj]
... elif isinstance(obj, dict):
... return {stringify(k):stringify(v) for k,v in obj.iteritems()}
... else:
... return obj
...
>>> print stringify(x)
{'giga-10': ['overview']}
</code></pre>
<p>但是没有很好的理由这样做,除非您真的需要python2<code>str</code>,即“字节字符串”。你几乎可以肯定没有,或者至少,没有指出任何理由。你知道吗</p>