2017-06-15 71 views
2

JSON.loads()輸出在字典類型而不是字符串類型,當我使用那樣json.dump(的)我得到以下JSON格式如何獲得使用Python

Dumps data"b'{\"AutomaticReadabilityIndex\":2.7999999999999994,\"AgeLevel\":[\" 11 to 12\"],\"Statement\":[\"Nice. Your grade is about six\"],\"SpacheScore\":1.877,\"GunningFogScore\":9.099999999999998,\"SmogIndex\":5.999999999999999}'" 

當我使用的JSON.loads()我得到下面的JSON格式字節

loads data b'{"AutomaticReadabilityIndex":2.7999999999999994,"AgeLevel":[" 11 to 12"],"Statement":["Nice. Your grade is about six"],"SpacheScore":1.877,"GunningFogScore":9.099999999999998,"SmogIndex":5.999999999999999}' 

我的問題是,當我使用負載格式化輸出已經是在字典類型,但我不知道爲什麼我得到字符串類型作爲我的輸出。如何將此JSON字符串轉換爲字典類型。

Loads Data Type : type of loads <class 'str'> 

當我試圖直接解析字符串類型JSON我得到以下錯誤

ERROR : Traceback (most recent call last): 
File "Db.py", line 84, in <module> 
print(par['GunningFogScore']) 
TypeError: string indices must be integers 
+1

你正在傾銷'json'字符串而不是python字典(你正在傾銷一個轉儲...)。不要使用'json'轉儲一個字符串,只需寫下它。 –

+0

@ Jean-François法布爾它也幫助了我謝謝:) –

+0

@ Jean-FrançoisFabre這是什麼意思「不要使用json轉儲字符串只是寫它」我正在與同樣的錯誤掙扎,但沒有得到您的評論: ( – soommy12

回答

0

我可以重現你的問題簡單地:

import json 

s = {"AutomaticReadabilityIndex":2.7999999999999994,"AgeLevel":[" 11 to 12"],"Statement":["Nice. Your grade is about six"],"SpacheScore":1.877,"GunningFogScore":9.099999999999998,"SmogIndex":5.999999999999999} 

print(json.dumps(json.dumps(s))) 

結果:

"{\"SmogIndex\": 5.999999999999999, \"AutomaticReadabilityIndex\": 2.7999999999999994, \"SpacheScore\": 1.877, \"GunningFogScore\": 9.099999999999998, \"AgeLevel\": [\" 11 to 12\"], \"Statement\": [\"Nice. Your grade is about six\"]}" 

因此:

  • 你正在鏈接兩個轉儲。第一個轉儲將字典轉換爲字符串,但轉儲字符串也是有效的,所以字符串被轉儲,引號,轉義等等。
  • 您正在轉儲字符串,它看起來像字典("{12:1,14:2}")。

(如果你不知道的類型,檢查type(s)進行轉儲前)

所以,當你與

par = json.loads(s) 

重裝你得到一個字符串,而不是一個字典,它使用[]時解釋錯誤消息(因爲您試圖將密鑰傳遞給字符串)

解決方法:

使用json.loads(json.loads(s))恢復您的數據。

作爲一個更好的修復方法,只需在序列化過程中使用dumps一次。

+0

我明白你說了什麼,但是在我的代碼中,我正在使用'dumps '只有一次。無論如何,我認爲如果我有像json那樣格式化的字符串,我應該使用'loads'方法將它轉換爲obj,然後使用已經是字符串的東西的轉儲方式 – soommy12

+0

。如果它已經是一個字符串,只需將它直接寫入文件,不要使用'json' –

+0

我可以像正常字典一樣迭代它嗎? – soommy12