最近需要用到取流操作,在编辑requests.post()请求时需要用到json,记一下基本操作:
import json
'''
涉及的数据类型:dict,str
涉及的方法:dump、dumps,load、loads
其他:涉及文件的读写操作,入with open(filename,"r") as f
'''
dict 就是python字典,json数据对象看着很像字典,但是json操作的对象是字符串,这是刚接触时容易误犯的错误。字典是字典,在字典外面加单引号就是字符串。json.dump/json.dumps 方法就是干这个的,把字典编码为字符串。区别在于:
dic = {"name":"wangdachui"} # 这是一个字典
@1
with open("config.json","w") as f:
json.dump(dic,f) # dump将字典转为字符串存到config.json 文件中
@2
str_dic = json.dumps(dic) # dumps,可以理解为dump string,将字典转化为字符串
# 不同的是这里str_dic不用存到文件对象中,只是变成了一个字符串变量。
type(str_dic) ==>> 'str'
#3
with open("config.json","r") as f:
dic = json.load(f) # load方法将文件对象解码为字典对象
# 这里也可以替换为dic = json.loads(f.read())
#4
dic = json.loads(str(dic)) # 这里使用loads加载字典时需要先将dic转化为字符串,
# loads 可以理解为load string
# 要读取一个json文件中的内容并重写该json文件:
with open("config.json","r") as f:
dic = json.load(f) # 读出config.json中的内容为字典
with open("config.json","w") as f:
dic.setdefault("age",88)
dic.setdefault("sex","femal")
json.dump(dic,f,indent=4) # 将dic存到新的文件中;为了易读可以设置缩进为4
个人写的一些代码:
import os
import json
# import jpype
import requests
# 保存字典为json:json.dump(dict,file)
a = {"name":"wangdachui"}
with open("camera.json","w") as f:
json.dump(a,f)
res = {"cameraId":"kdhgshaii9232kdhs",
"data":{
"time":"20220101",
"url":"rtsp://ikahlshahkks/sdkja/iwehgasd"
},
"event_type":"alarmSmoking"}
# 保存字典为json,并有缩进为4
with open("config.json","w") as f:
json.dump(res,f,indent=4)
#读取json给变量赋值 load方法
with open("config.json","r") as f:
cfg = json.load(f)
camera_id = cfg['cameraId']
rtsp = cfg['data']['url']
#读取并重写json文件
with open("camera.json","r") as f:
camera_json = json.load(f) # 虽然文件f关闭了但是camera_json作为一个对象继续存在.
with open("camera.json","w") as f: # 重新写文件camera.json,覆盖掉之前的
print("camera_json",camera_json)
camera_json.setdefault("camera_id",camera_id)
print("camera_id: ", camera_id)
camera_json.setdefault("rtsp_url",rtsp)
print("rtsp_url: ", rtsp)
print("type of camera_json: ", type(camera_json))
json.dump(camera_json,f)