43-json模块

作者: ju7ran | 来源:发表于2019-04-24 13:26 被阅读3次

    json

    Json是一种轻量级的数据交换格式。Json源自JavaScript语言,易于人类的阅读和编写,同时也易于机器解析和生成,是目前应用最广泛的数据交换格式。

    Json是跨语言,跨平台的,但只能对Python的基本数据类型做操作,对Python的类就无能为力。JSON格式和Python中的字典非常像。但是,json的数据要求用双引号将字符串引起来,并且不能有多余的逗号。这是因为在别的语言中,双引号引起来的才是字符串,单引号引起来的是字符;Python程序员习惯性的在列表、元组或字典的最后一个元素的后面加个逗号,这在json中是不允许的,需要特别注意。

    在Python中,很多场合是需要使用json的。比如socket通信中,你能直接发送一个列表给对方吗?显然是不行的,因为socket是基于bytes类型进行字节发送的。这时候就可以通过json将列表转换成字符串,再encode()成bytes类型,然后发送过去。

    类型转换

    将数据从Python转换到json格式,在数据类型上会有变化,如下表所示 :

    Python                                  JSON
    dict                                    object
    list, tuple                             array
    str                                     string
    int, float, int- & float-derived Enums  number
    True                                    true
    False                                   false
    None                                    null
    

    使用方法

    json模块的使用其实很简单,对于绝大多数场合下,我们只需要使用下面四个方法就可以了:

    方法                  功能
    json.dump(obj, fp)  将python数据类型转换并保存到json格式的文件内。
    json.dumps(obj)     将python数据类型转换为json格式的字符串。
    json.load(fp)       从json格式的文件中读取数据并转换为python的类型。
    json.loads(s)       将json格式的字符串转换为python的类型。
    

    案例

    import json
    s = 'json'
    json.dump(s,open('json-1.txt','w'))
    -------------------------------------
    json-1.txt
    json
    -------------------------------------
    json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
    '["foo", {"bar": ["baz", null, 1.0, 2]}]'
    -------------------------------------
    p = json.load(open('json-1.txt','r'))
    print(p)
    -------------------------------------
    j = '["foo", {"bar": ["baz", null, 1.0, 2]}]'
    p = json.loads(j)
    ["foo", {"bar": ["baz", null, 1.0, 2]}]
    

    仔细观察四个方法的名称,很好记忆的,要转化成json就‘dump’,要从json转化成Python就‘load’;要根据字符串转化就加‘s’,要从文件进行转化就不加‘s’。

    需要注意的是json模块不支持bytes类型,要先将bytes转换为str格式

    import json
    s = b'json'
    k = json.dumps(s)
    Traceback (most recent call last):
      File "<pyshell#5>", line 1, in <module>
        k = json.dumps(b)
      File "C:\Python36\lib\json\__init__.py", line 231, in dumps
        return _default_encoder.encode(obj)
      File "C:\Python36\lib\json\encoder.py", line 199, in encode
        chunks = self.iterencode(o, _one_shot=True)
      File "C:\Python36\lib\json\encoder.py", line 257, in iterencode
        return _iterencode(o, 0)
      File "C:\Python36\lib\json\encoder.py", line 180, in default
        o.__class__.__name__)
    TypeError: Object of type 'bytes' is not JSON serializable
    k = json.dumps(b.decode())
    k 
    '"json"'
    

    相关文章

      网友评论

        本文标题:43-json模块

        本文链接:https://www.haomeiwen.com/subject/dkfggqtx.html