关键词:JSON; json.load(); json.loads(); json.dump(); json.dumps()
json != python 字典
dumps loads -- 内存操作
dump load -- 文件操作
1. json.dumps()
将python字典编码成json字符串,即生成的是字符串,要保存需一行一行再写入文件。
import json
x = {'name':'你猜','age':19,'city':'四川'}
#用dumps将python编码成json字符串
with open(path, mode='w') as f:
y = json.dumps(x)
print(y)
f.write(y)
# 输出:
{"name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
2. json.dump()
将python字典编码为一个json字符串,并生成文件流,和文件相关,转换和写入文件一次进行
import json
#将python对象转换为json字符串
js_path = r'D:\\PythonFiles\\ANXING\\anxin2\\JSON\\log\\Log\\after\\综合after\\js.json'
x1 = {'name1':'你猜','age':19,'city':'四川'}
x2 = {'name2':'你猜','age':19,'city':'四川'}
x3 = {'name3':'你猜','age':19,'city':'四川'}
X = [x1, x2, x3]
with open(js_path, 'w') as f:
json.dump(X, f)
f.close()
# 输出json文件:[{"name1": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}, {"name2": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}, {"name3": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}]
3. json.loads()
打开json文件,一行一行读取,每次读取一行,每行可能不是一个完整的json
path = r'D:\\PythonFiles\\ANXING\\anxin2\\JSON\\log\\Log\\after\\综合after\\after_df.json'
with open(path, mode='r') as f:
for line in f.readlines():
content = json.loads(line)
print(content)
break
# 输出:
{'log': '20210831-10:19:03.500-8245024120949 : 8=FIXT.1.1\x019=116\x0135=A\x0134=581\x0149=10.2.3.34_8033\x0152=20210831-10:19:03.500\x0156=tgw_8033\x0198=0\x01108=30\x01789=577\x011137=9\x011408=STEP1.20_SZ_1.11\x0110=064\x01\n', 'INDEX': 1}
4. json.load()
读取一个完整的json文件。注:每行是一个json的话会报错
with open(path, mode='r') as f:
content = json.load(f)
print(content)
# 输出:一个json文件
5. open
with open(path, mode='r/a/w') as df:
# 1. 读出全部数据
data = df.read()
# 2. 读出一行
data = df.readline()
# 3. 遍历迭代
for line in df.readlines()
print(line)
# 4. 写入一行
saveFile.write(data)
# 5. 写入全部文件
saveFile.writelines(data)
# 6. 关闭文件
df.close()
6. pickle
python语言中特有的序列化模块,可操作所有数据类型,但是只能在python一种语言中使用。具体用法和json同样。
import pickle
dic = {}
ret = pickle.dumps(dic)
print(ret)
d = pickle.loads(ret)
print(d)
7. 字符串与字典之间的转换
- 字典式的字符串可以用json.loads()方法转换为字典
- 字典式的字符串可以用eval()方法转换为字典
import json
str1 = '{"a":1, "b":2}'
print(type(str1))
print(str1)
# 输出:<class 'str'>; {"a":1, "b":2}
# json.loads()方法可以将字典格式的字符串转换为字典
str2 = json.loads(str1)
print(type(str2))
print(str2)
# 输出:<class 'dict'>; {'a': 1, 'b': 2}
# eval方法可以将字典格式的字符串转换为字典
str3 = eval(str1)
print(type(str3))
print(str3)
# 输出:<class 'dict'>; {'a': 1, 'b': 2}