JSON是現代Web應用程序中使用的主要數據交換協議之一,因為它易於閱讀和編寫,並且與許多編程語言兼容,包括Python。本文將介紹如何在Python中使用JSON解析和轉換字符串。
一、JSON簡介
JSON(JavaScript Object Notation)是一種輕量級數據交換格式,它基於JavaScript語言的一個子集。JSON以鍵值對的形式表示數據,並使用大括號封裝對象,用方括號封裝數組。JSON的結構和Python中的字典和列表很像。
JSON數據類型:
– 字符串:用雙引號表示,例如:”hello world”
– 數字:包括整數和浮點數,例如:12, 3.14
– 布爾值:true, false
– 空值:null
– 對象:用大括號{}表示,例如:{“name”: “Mike”, “age”: 20}
– 數組:用方括號[]表示,例如:[1, 2, 3]
二、JSON字符串轉Python對象
Python中有一個內置的json模塊,可以將JSON字符串轉換為Python對象,例如字典或列表。使用json.loads()方法將JSON字符串解析為Python對象。
import json json_string = '{"name": "Mike", "age": 20}' python_obj = json.loads(json_string) print(python_obj)
輸出:
{'name': 'Mike', 'age': 20}
三、Python對象轉JSON字符串
同樣,可以使用json.dumps()方法將Python對象轉換為JSON字符串。
import json python_obj = {'name': 'Mike', 'age': 20} json_string = json.dumps(python_obj) print(json_string)
輸出:
{"name": "Mike", "age": 20}
四、編碼和解碼自定義類
當涉及到自定義類時,json模塊需要特殊處理。它無法自動序列化類,但是我們可以定義類的__dict__屬性,將其轉化為一個可序列化的字典。
import json class Student: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return "Name: %s, Age: %d" % (self.name, self.age) student = Student("Mike", 20) def encode_student(student): if isinstance(student, Student): return {"name": student.name, "age": student.age} return student.__dict__ json_str = json.dumps(student, default=encode_student) print(json_str) decoded_student = json.loads(json_str) print(decoded_student)
輸出:
{"name": "Mike", "age": 20} {'name': 'Mike', 'age': 20}
在編碼時使用default參數,指定一個函數來處理自定義類。在這裡,我們將`Student`類轉換為字典類型,其他類型則返回其`__dict__`屬性。
五、處理JSON文件
可以使用`json.load()`和`json.dump()`來讀寫JSON文件。
import json # 寫入JSON文件 data = {"name": "Mike", "age": 20} with open("data.json", "w") as f: json.dump(data, f) # 讀取JSON文件 with open("data.json", "r") as f: data = json.load(f) print(data)
輸出:
{'name': 'Mike', 'age': 20}
六、總結
本文介紹了Python中json字符串的解析和轉換。我們學習了JSON的基本概念,如何將JSON字符串轉換為Python對象、如何將Python對象轉換為JSON字符串,如何處理自定義類,以及如何讀寫JSON文件。對於處理JSON數據,學習這些知識點是至關重要的。
原創文章,作者:CVSM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/148608.html