zoukankan      html  css  js  c++  java
  • 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))


    ####

  • 相关阅读:
    win10 UWP button
    内网分享资源
    内网分享资源
    CF724F Uniformly Branched Trees
    win10 UWP FlipView
    win10 UWP FlipView
    win10 UWP FlipView
    搭建阿里云 centos mysql tomcat jdk
    搭建阿里云 centos mysql tomcat jdk
    win10 UWP 申请微软开发者
  • 原文地址:https://www.cnblogs.com/andy0816/p/15253608.html
Copyright © 2011-2022 走看看