<p>必须在错误的数据集上循环;只要直接在加载了JSON的字典上循环,就不需要首先调用<code>.keys()</code>:</p>
<pre><code>data = json.loads(response)
myList = [item for item in data if item == "number1"]
</code></pre>
<p>您可能需要使用<code>u"number1"</code>来避免Unicode和字节字符串之间的隐式转换:</p>
<pre><code>data = json.loads(response)
myList = [item for item in data if item == u"number1"]
</code></pre>
<p>两个版本都工作正常:</p>
<pre><code>>>> import json
>>> data = json.loads('{"number1":"first", "number2":"second"}')
>>> [item for item in data if item == "number1"]
[u'number1']
>>> [item for item in data if item == u"number1"]
[u'number1']
</code></pre>
<p>注意,在第一个示例中,<code>us</code>是<strong>而不是</strong>一个UTF-8字符串;它是unicode数据,<code>json</code>库已经为您解码了它。另一方面,UTF-8字符串是一个<em>编码字节</em>序列。您可能需要阅读Unicode和Python以了解其区别:</p>
<ul>
<li><p><a href="http://joelonsoftware.com/articles/Unicode.html">The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)</a>作者Joel Spolsky</p></li>
<li><p><a href="http://docs.python.org/3/howto/unicode.html">Python Unicode HOWTO</a></p></li>
<li><p><a href="http://nedbatchelder.com/text/unipain.html">Pragmatic Unicode</a>作者:Ned Batchelder</p></li>
</ul>
<p>在Python 2上,您对测试返回<code>True</code>的期望是正确的,但您做了其他错误的事情:</p>
<pre><code>>>> us = u'MyString'
>>> us
u'MyString'
>>> type(us)
<type 'unicode'>
>>> us.encode('utf8') == 'MyString'
True
>>> type(us.encode('utf8'))
<type 'str'>
</code></pre>
<p>不需要将字符串编码为UTF-8进行比较;请改用unicode文本:</p>
<pre><code>myComp = [elem for elem in json_data if elem == u"MyString"]
</code></pre>