簡體   English   中英

使用python處理JSON文件

[英]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()

{
   "desktop":{
      "name":"build",
      "upload":{
         "maximum":512
      },
      "load":{
         "core":"i7"
      }
   },
   "table":{
      "name":"clean",
      "upload":{
         "maximum":1024
      },
      "load":{
         "core":"i3"
      }
   }
}

代碼圖片

json當應為無逗號的屬性之一時

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM