当前位置:   article > 正文

python内置模块【json】_python内置json

python内置json

1.定义

  • json模块,是python内部的一个模块,可以将python的数据格式转换为json格式的数据,也可以将json格式的数据转换为python的数据格式

  • json格式,是一个数据格式(本质上就是字符串,常用于网络数据传输)

  • python中的数据格式

    data=[
        {'id':1,name:'wxy'},
        ('wxy1',123)
    ]
    
    • 1
    • 2
    • 3
    • 4
  • JSON格式

    data='[{"id":1,name:"wxy"},["wxy1",123]]'
    
    • 1
  • 注意:【 json中字符串要用""(双引号)】

2.核心功能及作用

  • 跨语言数据传输
    • 语言不同,基础数据类型格式不同
    • 为了方便数据传输,约定格式:json格式

在这里插入图片描述

  • python数据类型与json格式的相互转换

    • python数据类型---->json【序列化】

      import json
      data=[
          {'id':1,'name':'小红'},
          ('wxy1',123)
      ]
      res=json.dumps(data)
      print(res)  #'[{"id": 1, "name": "\u5c0f\u7ea2"}, ["wxy1", 123]]'
      
      #ensure_ascii=False,显示中文
      res1=json.dumps(data,ensure_ascii=False)
      print(res1)#'[{"id": 1, "name": "小红"}, ["wxy1", 123]]'
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    • json---->python数据类型【反序列化

      import json
      data='[{"id":1,"name":"王晓宇"},["wxy1",123]]'
      res=json.loads(data)
      print(res)  #[{'id': 1, 'name': '王晓宇'}, ['wxy1', 123]]
      
      • 1
      • 2
      • 3
      • 4

3.类型要求

  • python的数据类型转换为json格式,对数据类型有要求,默认只支持:

     	+-------------------+---------------+
        | Python            | JSON          |
        +===================+===============+
        | dict              | object        |
        +-------------------+---------------+
        | list, tuple       | array         |
        +-------------------+---------------+
        | str               | string        |
        +-------------------+---------------+
        | int, float        | number        |
        +-------------------+---------------+
        | True              | true          |
        +-------------------+---------------+
        | False             | false         |
        +-------------------+---------------+
        | None              | null          |
        +-------------------+---------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 其他类型想要支持,需要自定义JSONEncoder才能实现

    import json
    from decimal import Decimal
    from datetime import datetime
    data = [
        {"id": 1, "name": "小红", "age": 18, 'size': Decimal("18.99"), 'ctime': datetime.now()},
        {"id": 2, "name": "wxy", "age": 18, 'size': Decimal("9.99"), 'ctime': datetime.now()},
    ]
    class MyJSONEncoder(json.JSONEncoder):
        def default(self, o):
            if type(o)==Decimal:
                return str(0)
            elif type(o)==datetime:
                return o.strftime('%Y-%m-%d')
            return super().default(o)
    res=json.dumps(data,cls=MyJSONEncoder,ensure_ascii=False)
    print(res)
    #[{"id": 1, "name": "小红", "age": 18, "size": "0", "ctime": "2022-01-03"}, {"id": 2, "name": "wxy", "age": 18, "size": "0", "ctime": "2022-01-03"}]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

4.其他功能

  • json.dumps,序列化生成一个json字符串

  • json.loads,反序列化生成python数据类型

  • json.dump,将数据序列化并写入文件【不常用】

    import json
    data=[
        {'id':1,'name':'小红'},
        ('wxy1',123)
    ]
    f=open('files/a.json',mode='w',encoding='utf-8')
    json.dump(data,f,ensure_ascii=False)
    f.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • json.load,读取文件中的数据并反序列化为python的数据类型【不常用】

    import json
    f=open('files/a.json',mode='r',encoding='utf-8')
    res=json.load(f)
    f.close()
    print(res,type(res))
    #[{'id': 1, 'name': '小红'}, ['wxy1', 123]] <class 'list'>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

5. 实际案例

  • 写入文件格式为:
    在这里插入图片描述
    data = [{"a": "1", "b": "2"}, {"a": "1", "b": "2"}]
    
    with open('data/data.json', 'w') as json_file:
        for item in data:
            print(item)
            json.dump(item, json_file, ensure_ascii=False) #  ensure_ascii=False保存中文
            json_file.write('\n')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/191213
推荐阅读
相关标签
  

闽ICP备14008679号