我正在從jython中導入/解析JSON創建的字典。「str索引必須是整數」是什麼意思?
TypeError: str indices must be integers
這時候我做這樣的事情發生:某些章節我看到下面的消息,工作
if jsondata['foo']['bar'].lower() == 'baz':
...
凡jsondata
樣子:
{'foo': {'bar':'baz'} }
這是什麼意思,和我如何解決它?
我正在從jython中導入/解析JSON創建的字典。「str索引必須是整數」是什麼意思?
TypeError: str indices must be integers
這時候我做這樣的事情發生:某些章節我看到下面的消息,工作
if jsondata['foo']['bar'].lower() == 'baz':
...
凡jsondata
樣子:
{'foo': {'bar':'baz'} }
這是什麼意思,和我如何解決它?
在從字典中獲取數據之前,您需要在字典中檢查字典和字符串'z'的類型。
>>> jsondata = {'a': '', 'b': {'z': True} }
>>> for key in jsondata:
... if type(jsondata[key]) is dict and 'z' in jsondata[key].keys() and jsondata[key]['z'] is True:
... print 'yes'
...
yes
>>>
或較短的一個與dict.get
>>> jsondata = {'a': '', 'b': {'z': True}, 'c' :{'zz':True}}
>>> for key in jsondata:
... if type(jsondata[key]) is dict and jsondata[key].get('z',False):
... print 'yes'
...
yes
>>>
其實你的陳述應該提高SyntaxError: can't assign to function call
,因爲你錯過了=
,因此做了一個任務而不是平等檢查。
因爲我在運行你所顯示的代碼時沒有得到TypeError,所以我想你首先修復了丟失的=
,之後再檢查一下Stacktrace的說法。
但是它也可能是你的jsondata沒有被解碼,因此仍然是純文本,這當然會提高索引錯誤。
對不起,修復了錯字 – 2010-04-27 10:30:06
正如Marcelo和Ivo所說,這聽起來像是在嘗試訪問原始JSON字符串,而沒有先通過json.loads(my_json_string)
將其解析爲Python。
Yupp。試圖訪問JSON作爲str ...他們爲什麼不在學校教C#? – 2014-09-29 12:56:18
你確定你實際上已經解碼的JSON字符串Python類型? – 2010-04-27 10:24:31
if jsondata ['foo'] ['bar']。lower()=='baz':? 它看起來像你正在將「baz」分配給lower()函數... – Powertieke 2010-04-27 10:24:42
你應該'打印repr(jsondata)'以確保它確實是你期望的'dict',而不是你實際擁有的'str' (查看答案。) – 2010-04-27 10:33:43