zoukankan      html  css  js  c++  java
  • json 序列化和反序列化(针对python数据类型)

     序列化和反序列化

    1、含义:

    一般应用于json模块,还有pickle模块、shelve模块)

    -------->序列化定义: 将python数据类型等内容  转化  为json格式字符串的过程就叫  序列化

    可转化的python数据类型对象:(如有:字符串、元组、列表、集合不能实现转化)

    2、目的:

    以某一种形式来存储对象,并且对象由自己定义的形式;

    将对象可传输到指定位置,且更好的维护及存储。

    3、区别:

    json.loads()和json.dumps()------区别-------json.load() 和json.dump() 

    -------->对py基础数据类型的序列化、反序列化:

    json.loads()反序列化:将json格式字符串 转为  py数据类型

    json.dumps()序列化:将 py数据类型 转为  json格式字符串

    -------->对文件的序列化、反序列化

    json.load()  读文件:读取出文件中的json字符串内容

    json.dump()  写文件:以json格式写入文件

    实际用法:(针对python数据类型)

     

    下面仅仅是对dict的序列化和反序列化操作(还有其他如:list、tuple)

    1、json.loads()反序列化:将json字符串形式的转化为字典类型

    dic=''{'name':'a1','psw':'123'}''  #一个字符串
    dic_2=json.loads(dic) #反序列化操作:将dic字符串类型 转化为为字典,且用dic_2来接收结果 print(type(dic_2)) #打印查看dic_2的类型,结果可见是dict字典类型

    2、json.dumps()序列化:将字典形式的转化为 str字符串类型

    dic_3={'name':'a1','psw':'123'}  #一个字典dic_3
    import json
    dic_4=json.dumps(dic_3) #序列化操作:转化dic_3字典格式为 str字符串,且用dic_4来接收结果 print(type(dic_4)) #打印查看dic_4的类型,结果可见是str类型

    下面是对文件序列化、反序列化。(即:文件读、写)

    1、json.load()   从文件内读取json格式内容

    with open('text.json','r',encoding='utf-8') as f :   #读取text.json文件中的json字符串,编码为utf-8
    print(json.load(f))    #打印出结果,可见为json格式的str类型内容

    2、json.dump()    以json格式写入内容到文件内

    content = '{"name":"anthony","sex":"man"}'   #有一个字符串
    with open('text.json','w',encoding='utf-8') as f:   #打开text.json文件,以json格式并写入;编码utf-8
    json.dump(content,f)    #打印出结果,可见文件中显示内容未json格式字符串

     常用:

    1、如:请求一个接口时,类型:content-Type:application/ json,接口返回值为:{code:200,msg:"xxxxxxxxxxxxxx",error:" "}

    那么要取出返回数据中msg的值:

    
    
    #先请求一个接口
    r = requests.post(url = "www.xxxcxxxx",
               header = "xxxx",
               data = "xxxxxxx")

    #然后打印r.text
    print(r.text)
    print json.loads(str(r.text))['msg'] #打印时转换类型为str字符串,然后json反序列化为字典类型,这样就可实现了(否则会报错)

    2、预期给出的账号和密码为一个字典类型的,但是传入参数需要为字符串类型,那么就可以json序列化操作:

    {"username":"qika","password":"123456"}      #给定的字典类型:账号和密码
    """序列化:转化为str字符串类型,然后传入接口请求参数内"""
    r = requests.post(url = "www.xxxcxxxx",
               header = "xxxx",
               data = json.dumps(
    {"username":"qika","password":"123456"}
    )
    )

    3、如:请求一个url后,将response 返回内容写入文件

    json.dump(r.content.decode("utf-8")) , open("a.json" , "w")     #序列化操作:将r.content写入到a.json文件中

    4、如:注册和登录时,在py当中进行注册时写入注册数据到文件,然后登录时通过读取文件的数据来判断登录与否

    register:
    """注册时,通过以temp_file的数据格式,来写入注册数据到文件register_data中"""---------文件的写入:序列化
      temp_file = username + "|" + password
      json.dump(temp_file,open("register_data" , "w"))

    def login(username,password):
    """#读取文件内的注册数据,准备来判断用户输入时是否正确对应,且可以正常登录:---反序列化:将register_data中的内容读取出来(文件中内容的类型是字典),然后再强制str为字符串"""
      f = str(json.load(open("register_data" , "r"))) 
      list_1 = f.split("|") #因为上一步读取出来的数据格式字符串类型,所以这里进行分割为列表,然后好进行判断登录数据了
      if list_1[0] == username and list_1[1] == password: #判断y用户输入和实际的注册数据是否一致(即,判断是否能够登录成功)
        return True
      else:
        return False


  • 相关阅读:
    js 小程序获取本周七天
    js 时间处理函数 获取今天的前几天和后几天的任意一天
    路由配置
    3 vue-router 的默认hash 改mode:history去除#号 传参
    Eslint 配置及规则说明(报错)
    打开左侧菜单栏
    sublime 对vue的高亮显示
    gitlab 本地建库配置 config
    GIT 安装
    v-html的应用
  • 原文地址:https://www.cnblogs.com/QiKa/p/12900181.html
Copyright © 2011-2022 走看看