1、概述
Python操作json文件在测试中会经常用到,那么python怎么操作json文件呢,今天就来简单了解一下。Python中提供了dumps、dump、loads、load,用于字符串 和 python数据类型间进行转换。
2、json.dumps()
json.dumps()用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数。
1)dict类型数据转成str演示
# encoding:utf-8 import json # 字典 var_dir = {'name': 'zhangsan', 'password': 'zs123456'} # 字典转为字符串 var_str = json.dumps(var_dir) # 打印变量 print(var_dir) print(var_str) # 打印变量类型 print(type(var_dir)) print(type(var_str))
运行结果
2)dict类型数据转成str应用
# encoding:utf-8 import json var_dir = {'name': 'zhangsan', 'password': 'zs123456'} # 字典转为字符串,此步必不可少,否则数据写入json文件时会报错 var_str = json.dumps(var_dir) file_path = '../dataconfig/test.json' with open(file_path,'w') as fp: fp.write(var_str) fp.close()
3、json.loads()
json.loads()用于将str类型的数据转成dict
# encoding:utf-8 import json # 字典 var_dir = {'name': 'zhangsan', 'password': 'zs123456'} # 字典转为字符串 var_str = json.dumps(var_dir) # 字符串转为字典 var_conver_dir = json.loads(var_str) # 打印变量 print(var_dir) print(var_str) print(var_conver_dir) # 打印变量类型 print(type(var_dir)) print(type(var_str)) print(type(var_conver_dir))
运行结果如下,str转dir时会发生编码转换,str会转换成unicode,因此红色框中的打印结果会出现u
4、json.dump()
json.dump()用于将dict类型的数据转成str,并写入到json文件中。因此如下两种方法都可将数据写入json文件
# encoding:utf-8 import json var_dir1 = {'name': 'zhangsansan', 'password': 'zss123456'} var_dir2 = {'name': 'lisisi', 'password': 'lss123456'} file_path = '../dataconfig/test.json' # 方法一:数据写入json文件 # 字典转为字符串 var_str = json.dumps(var_dir1) with open(file_path,'w') as fp: fp.write(var_str) fp.close() # 方法二:数据写入json文件 json.dump(var_dir2,open(file_path,'w'))
5、json.load()
json.load()用于从json文件中读取数据
# encoding:utf-8 import json file_path = ('../dataconfig/login.json') data = json.load(open(file_path)) print(data) print(type(data)) for key in data.keys(): print('key: %s value: %s' % (key, data.get(key)))
运行结果如下
6、封装方法读取json文件,根据key返回对应值
# coding:utf-8 import json class OperJson: # 构造函数 def __init__(self,filepath=None): if filepath: self.filepath = filepath else: self.filepath = "../dataconfig/login.json" self.data = self.read_data() def read_data(self): # 这样写比fp = open(self.filepath)好,以防打开后忘了关闭,忘写fp.close() with open(self.filepath) as fp: data = json.load(fp) return data def get_data(self,keyname): return self.data[keyname] if __name__ == '__main__': op = OperJson() print op.get_data('login') print op.get_data('getUserInfo')