python读取和保存json文件
json是一种结构化数据的方式,通常用于保存信息。
json基本语法
json的语法看起来像一个带有键值对的 JavaScript 对象字面。
基本语法规则:
-
数据在名称/值对中
-
数据由逗号 , 分隔
-
使用斜杆 \来转义字符
-
大括号 {} 保存对象
-
中括号 [] 保存数组,数组可以包含多个对象
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
值可以是:
- 数字(整数或浮点数),不需要双引号
- 字符串(在双引号中),需要双引号
- 逻辑值(true 或 false),不要双引号
- 数组(在中括号中),需要中括号
- 对象(在大括号中),需要大括号
- null
数组
JSON 数组在中括号 [] 中书写:
数组可包含多个对象:
1 2 3 4 5 6 7
| { "sites": [ { "name":"菜鸟教程" , "url":"www.runoob.com" }, { "name":"google" , "url":"www.google.com" }, { "name":"微博" , "url":"www.weibo.com" } ] }
|
python读取json文件
python中有一个内置的模块,可以直接导入。
使用json.loads()可以将json文件解析为python字典。
假设有一个名字为fcc.json的文件,如果想用python打开并读取,需要先使用python内置的open()函数,使用with关键字保证文件被正确关闭。
1
| with open('fcc.json', 'r') as fcc_file:
|
然后就可以使用
1
| fcc_data = json.load(fcc_file)
|
完整实例代码:
1 2 3 4 5
| import json
with open('fcc.json', 'r') as fcc_file: fcc_data = json.load(fcc_file) print(fcc_data)
|
可以用get(名称)的方法来获取键值。
比如data.get("speed_gate")
python写入json数据
与读取 JSON 数据类似,Python 中写入 JSON 数据也非常容易。可以使用 json 模块中的 dump() 或 dumps() 函数来实现。dump() 用于将数据写入文件,而 dumps() 用于将数据转换为 JSON 字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| def savePara(self,evt): path = os.path.join(os.path.dirname(__file__), "paraments.json")
try: self.speed_gate = self._get_int_from_entry(self.ui.tk_input_mls4siet, "速度阈值") self.move_speed = self._get_int_from_entry(self.ui.tk_input_mls509yg, "移动速度") self.move_position = self._get_int_from_entry(self.ui.tk_input_mls50t88, "移动位置") self.click_speed = self._get_int_from_entry(self.ui.tk_input_mls5233r, "点动速度") self.pos_limit_min = self._get_int_from_entry(self.ui.tk_input_mls55le5, "最小限位") self.pos_limit_max = self._get_int_from_entry(self.ui.tk_input_mls562rl, "最大限位")
data = { "speed_gate": self.speed_gate, "move_speed": self.move_speed, "move_position": self.move_position, "click_speed": self.click_speed, "pos_limit_min": self.pos_limit_min, "pos_limit_max": self.pos_limit_max, }
with open(path, "w", encoding="utf-8") as f: json.dump(data, f, indent=4, ensure_ascii=False)
messagebox.showinfo("保存参数", f"保存成功:\n{path}", parent=self.ui) print("保存参数成功:", data)
except Exception as e: messagebox.showerror("保存参数失败", str(e), parent=self.ui) raise
|