簡體   English   中英

將JSON字符串轉換為Python字典

[英]Converting JSON string into Python dictionary

我沒有太多的Python經驗,我遇到了將sql查詢數據轉換為Python字典的問題,這在技術上是一個包含JSON字符串的列表。 我正在查詢sqlite3數據庫,它返回一段數據,如下所示:

def get_answer(self, id):
    self.__cur.execute('select answer from some_table where id= %s;' % id)
    res_data = self.__cur.fetchall()
    return res_data

數據是單個JSON格式元素,其簡化版本如下所示:

[
 {"ind": [ {"v": 101}, {"v": 102}, {"v": 65 }]},
 {"ind": [ {"v": 33}, {"v": 102}, {"v": 65}]}
]

但是當我嘗試將res_data轉換為JSON時,使用如下代碼:

temp_json = simplejson.dumps(get_answer(trace_id))

它返回一個字符串,當我得到len(temp_json)時,它返回res_data中的字符數,而不是res_data中的對象數。 但是,如果我在get_answer(trace_id)返回的內容上使用Visual Studio的JSON可視化工具,則會正確顯示每個對象res_data。

我還嘗試將res_data轉換為字典,代碼如下:

dict_data = ast.literal_eval(Json_data)

要么

dict_data = ast.literal_eval(Json_data[0])

並且在兩種情況下都會拋出“格式錯誤的字符串”異常。 我試着將它寫入一個文件,並將其作為JSON讀回,但它沒有用。

在此之前,我手動將副本粘貼到res_data並使用:

with open(file_name) as json_file:
    Json_data = simplejson.load(json_file)

它就像一個魅力。 我一直在嘗試在SO和其他地方陳述的不同方式,但雖然問題似乎非常直接,但我仍然沒有找到解決方案,所以我非常感謝您的幫助。

我認為你混淆了數據格式。 您應該從數據庫包裝器中獲取的內容似乎是一個字典列表(它也不是SQL - 您的問題標題具有誤導性)。 但我實際上認為sqlite3會給你一個元組列表。

JSON是一種文本格式,或者更確切地說是對象到字符串的序列化。 這就是json.dumps(= dump to string)導致字符串和json.loads(= load string)導致python對象,字典或字典列表的原因。

json.dumps並不意味着“將JSON轉儲到字符串”。 它是json模塊的.dumps方法,它接受一個Python對象(dict,list)並將其序列化為JSON。

如果我明白你想要實現什么,但是你使用json.dumps()獲得JSON,我將擴展答案,JSON是一種字符串格式。 相比之下,simplejson.load()為您提供了Python列表或字典。

您是否嘗試過json.loads()以防萬一從數據庫返回實際上是一個字符串(您可以輕松測試)。

好的,我終於找到了解決方案:

states = json.loads(temp_json[0][0])

一個令人困惑的問題是states = json.loads(temp_json[0])拋出了“Expected string or buffer”異常而temp_json是一個只包含一個元素的列表,所以我不認為我會從temp_json [0]得到任何東西] [0]。

我希望它也能幫助別人!

暫無
暫無

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

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