[英]Handling JSON file with python
我正在開發用於升華文本的插件,但是在處理json文件時遇到一些問題。
這是json文件
{
"desktop":{
"name":"build",
"upload":{
"maximum":512,
},
"load":{
"core":"i7",
}
},
"table":{
"name":"clean",
"upload":{
"maximum":1024,
},
"load":{
"core":"i3",
}
}
}
這就是我的加載方式
with open(self.path, 'r') as f:
text = f.read()
datas = json.loads(text)
for data in datas:
print(data['desktop'])
輸出顯示此錯誤
TypeError: string indices must be integers
但是當我嘗試使用data[0]
我從json文件中得到了一個字符。
我知道我在解析和編碼方面做錯了,但是我不知道在哪里。 我整天都在這里閱讀以前的文章,並試圖找出正確的方法。
我會很感激的。
首先,您需要了解這不是JSON數組。 這是一個json對象-
{
"desktop":{
"name":"build",
"upload":{
"maximum":512,
},
"load":{
"core":"i7",
}
},
"table":{
"name":"clean",
"upload":{
"maximum":1024,
},
"load":{
"core":"i3",
}
}
}
所以代碼-
for data in datas:
print(data['desktop'])
不是在遍歷數組項,實際上是在遍歷該對象datas
的屬性/屬性。 因此,這樣做已經為您提供了商品-
for data in datas:
print(datas[data])
但是,如果您想操縱並找到每個屬性,則可以像這樣檢查-
for data in datas:
print(data)
print(datas[data])
if data == 'desktop':
print('do somthing')
這是它的在線視圖-https : //repl.it/B61g
編輯
如果datas
可以是數組或對象,則可以這樣檢查-
if type(datas) is list:
# datas is list do whatever you like
else:
# datas is obj
使用for每個循環遍歷JSON對象將為您提供json對象中的密鑰。 因此,在循環中,數據將引用字符串'desktop'本身(以及對象中的其他鍵),因此當您嘗試執行data['desktop']
您實際上是在嘗試獲取字符串的索引,但是由於string索引必須是數字,否則失敗
要從文件中打印'desktop'鍵,您只需編寫print(datas['desktop'])
嘗試這個:
for k, v in datas.iteritems():
# your stuff
遍歷字典將只為您提供鍵作為字符串。 您可能想要擁有的是:
for key, value in datas.items()
print(key, value)
嘗試print(type(datas))
,您將看到它的外部字典。 枚舉dict枚舉其鍵為字符串。 data
是一個字符串,並且data['desktop']
失敗也就不足為奇了。 許多問題都可以通過一些位置合理的印刷品來回答!
我的情況
data = res.read() //<<--HTTP DATA
resDic = json.loads(data.decode())
if resDic["code"] == 1000:
//some thing
試試data.decode()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.