json模块

1. json --JSON 编码和解码器

json 是一种轻量级的数据交换格式

1.1. 常用方法

  1. 编码 (dump) --将python对象转换为json字符串

    1. json.dumps()
      • 将字符串转化为json串(dumps)
      #!/usr/bin/python3
      # -*- coding: UTF-8 -*-
      '''
      将字符串转换为json串
      '''
      import json
      test = 'Hello World!'
      result = json.dumps(test)
      print(result)
      print(type(result))
      
       结果:
       linux-ko5m:/home/python/test # ./jsontest.py 
       "Hello World!"
       <class 'str'>
      
      • 将列表转化为json串(dumps)
      #!/usr/bin/python3
      # -*- coding: UTF-8 -*-
      '''
      将列表转换为json串
      '''
      import json
      test = ['Hello World!', {'hello' : "Hello World!"}]
      result = json.dumps(test)
      print(result)
      print(type(result))
      
       结果:
       linux-ko5m:/home/python/test # ./jsontest.py 
       ["Hello World!", {"hello": "Hello World!"}]
       <class 'str'>
      
      • 将字典转化为json串(dumps)(默认排序)
      #!/usr/bin/python3
      # -*- coding: UTF-8 -*-
      '''
      将字字典符串转换为json串
      '''
      import json
      test = {'name':'zhangsan', 'age':18}
      result = json.dumps(test)
      print(result)
      print(type(result))
      
       结果:
       linux-ko5m:/home/python/test # ./jsontest.py 
       {"age": 18, "name": "zhangsan"}
       <class 'str'>
      
      • 转化字典为json串时(dumps)(不排序)
      #!/usr/bin/python3
      # -*- coding: UTF-8 -*-
      '''
      将字字典符串转换为json串
      '''
      import json
      test = {'name':'zhangsan', 'age':18}
      result = json.dumps(test,sort_keys=False)
      print(result)
      print(type(result))
      
       结果:
       linux-ko5m:/home/python/test # ./jsontest.py 
       {"name": "zhangsan", "age": 18}
       <class 'str'>
      
      • 定义json串缩进(dumps)
      #!/usr/bin/python3
      # -*- coding: UTF-8 -*-
      '''
      定义json串缩进
      '''
      import json
      test = {'name':'zhangsan', 'age':18, 'list': ['a', 'b', 'c']}
      result = json.dumps(test,indent=4)
      print(result)
      print(type(result))
      
       结果:
       linux-ko5m:/home/python/test # ./jsontest.py 
       {
           "name": "zhangsan",
           "age": 18,
           "list": [
               "a",
               "b",
               "c"
           ]
       }
       <class 'str'>
      
      • 支持中文(ensure_ascii=False)
      #!/usr/bin/python3
      # -*- coding: UTF-8 -*-
      '''
      支持中文
      '''
      import json
      test = {'姓名':'张三','年龄':18}
      result = json.dumps(test, sort_keys=False, ensure_ascii=False)
      print(result)
      
       结果:
       linux-ko5m:/home/python/test # ./jsontest.py 
       {"姓名": "张三", "年龄": 18}
      
      • 将产生的json串写入文件(dumps)
      #!/usr/bin/python3
      # -*- coding: UTF-8 -*-
      '''
      将json串写入文件
      '''
      import json
      with open('file.json', 'w') as f:
          test = {'name':'zhangsan', 'age':18, 'list': ['a', 'b', 'c']}
          result = json.dumps(test, indent=4)
          f.write(result)
      
       结果:
       linux-ko5m:/home/python/test # cat file.json 
       {
           "list": [
               "a",
               "b",
               "c"
           ],
           "age": 18,
           "name": "zhangsan"
       }
      
    2. json.dump() --dump可以将python对象转换为json串后直接写入文件中
      #!/usr/bin/python3
      # -*- coding: UTF-8 -*-
      '''
      将json串写入文件(json.dump())
      '''
      import json
      with open('file.json', 'w') as f:
          test = {'name':'zhangsan', 'age':18, 'list': ['a', 'b', 'c']}
          result = json.dump(test, f, indent=4)
      
  2. 解码(load) --将json串转换成python的数据类型

    1. json.loads()
    #!/usr/bin/python3
    # -*- coding: UTF-8 -*-
    import json
    with open('file.json', 'r') as f:
        test = f.read()
        result = json.loads(test)
        print(type(test))
        print('json串:%s'%test)
        print('--------------------------------')
        print(type(result))
        print('python对象:%s'%result)
    
     结果:
     linux-ko5m:/home/python/test # ./jsontest.py 
     <class 'str'>
     json串:{
         "list": [
             "a",
             "b",
             "c"
         ],
         "age": 18,
         "name": "zhangsan"
     }
     --------------------------------
     <class 'dict'>
     python对象:{'list': ['a', 'b', 'c'], 'age': 18, 'name': 'zhangsan'}
    
    1. json.load()
    #!/usr/bin/python3
    # -*- coding: UTF-8 -*-
    import json
    with open('file.json', 'r') as f:
        result = json.load(f)
        print(type(result))
        print('python对象:%s'%result)
    
     结果:
     linux-ko5m:/home/python/test # ./jsontest.py 
     <class 'dict'>
     python对象:{'age': 18, 'list': ['a', 'b', 'c'], 'name': 'zhangsan'}
    
  3. dumps,loads与dump,load的区别

    1. dumps 和 dump 的区别
        dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw)
    
        dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw)
    
         可以看到,dump比 dumps多了一个参数 fp    
         dumps 会直接将生成的 json串 返回,也就是可以采取 json_str=dumps()的方式来获取结果  
         但是 dump 没有返回值,它会将生成的 json串 输出到 fp 流中   
    
    1. loads 和 load 的区别
        load(fp, cls=None, object_hook=None, parse_float=None,parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
    
        loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
    
         可以看到 load 的前两个参数是 fp 以及 cls,而 loads 的前两个参数是 s 和 encoding。 
         loads 会将 json串直接进行解码输出。  
         load 是从 fp 文件流中读取json串,然后进行解码输出。本质load函数定义的时候还是调用的 load函数。  
    
posted @ 2020-05-21 00:18  静心&得意  阅读(87)  评论(0编辑  收藏  举报