• 4-05python语法基础-内置模块-json模块


    ###

    序列化是什么?

    现在的序列化都是转向一个字符串数据类型,
    我们说的序列就是字符串,

    为什么要千方百计的转换成为字符串呢?----是为了存储和传递

    如果一个字典{"k":"v"}为什么要转成字符串

    1,我往文件或者数据库里面写内容的时候是不能写入字典的,可以写入字符串,
    2,还有在网络上传输的时候,我需要传递的是byte类型,怎么把字典转换成为一个byte类型呢,
    就要先转换为字符串,然后字符串转换为byte类型,
    基本就是这两种情况,需要序列化,

    这种从数据类型转为字符串,就是序列换,
    把字符串转换为数据类型的操作,就是反序列化,

    ####

    json就是python里面的一个内置模块,用来做序列化的,

    json模块---dumps序列化操作--把字段转换成字符串

    import json
    
    dict1 = {"name":"value","age":11}
    
    print(type(dict1))  # <class 'dict'>
    print(type(json.dumps(dict1)))  # <class 'str'>

    ###

    记住这个序列化之后是一个,{'name': 'andy', 'age': 11}

    里面是变为单引号了,

    ####

    json模块---loads反序列化操作--把字段转换成字符串

    ###

    import json
    
    jsonData = '{"name":"andy","age":11}'
    # jsonData = "{'name':'andy','age':11}"  # 这种不行,必须要有两个引号才行,
    
    text = json.loads(jsonData)
    print(type(jsonData),"-----",jsonData)  # <class 'str'> ----- {"name":"andy","age":11}
    print(type(text),"-----",text)  # <class 'dict'> ----- {'name': 'andy', 'age': 11}
    text_str = json.dumps(text)
    print(type(text_str),"-----",text_str)  # <class 'str'> ----- {"name": "andy", "age": 11}
    text_dict = json.loads(text_str)
    print(type(text_dict),"-----",text_dict)  # <class 'str'> ----- {"name": "andy", "age": 11}

    ###

    在 python3 里,一个json是一个字典,形如 {"a":15}

    json转换成字符串的话

    那么,如果你要将它转换成字符串,也许你用的是str({"a":15}),这样转出来的,可能是是s= "{'a':'15'}",也就是说,里面的kv是单引号的。这个字符串,传到其他地方,再用json.loads(s)的时候会出错,json不支持单引号。

    所以,假如你想把一个json结构,转成字符串,传递给远处,然后再重新解析成json结构,应该这样:

    s = json.dumps({"a":15})

    然后,把数据传到远端,然后再解析回来:

    d = json.loads(s)

    这样就不会出错了。

    也支持列表,能一次性传多个结构

    s = json.dumps([{"a":15}, {"b":20}])

    然后,把数据传到远端,然后再解析回来:

    d = json.loads(s)

    所以一定要注意这个单引号和双引号的问题,

    ###

    上面讲了dumps和loads,还有dump,和load两个方法,这两个基本没有用过,

     dump和dumps的区别:

    dump是将对象序列化并保存到文件中
    dumps是将对象序列化

    load和loads的区别:

    load将序列化字符串从文件读取并反序列化
    loads将序列化字符串反序列化

    ####

    一些特殊的报错

    python报错json.decoder.JSONDecodeError: Invalid control character at: line 1 column 74453 (char 74452)

    通过 python 的 json.loads(data) 方法报错时,加上 "strict=False" 即可,如

    data = json.loads(data, strict=False)

    ###

    import json
    # str1 = ''.format(num_dict)
    print(num_dict)
    print(json.dumps(num_dict))  -把单引号变成双引号
    str1 = json.dumps(num_dict)
    # print(json.loads(str1))


    ####

  • 相关阅读:
    两个三汇API使用的坑
    呼叫中心系统架构
    呼叫中心搭建的前期准备步骤
    呼叫中心基础知识
    一步一步开发呼叫中心
    富文本框保存和显示问题
    WebApi和Andriod对接上传和下载文件
    WebApi和Andriod对接访问模式问题
    Sql Server Report Service 的部署问题
    Web API 路由访问设置
  • 原文地址:https://www.cnblogs.com/andy0816/p/15253608.html
Copyright © 2020-2023  润新知