zoukankan      html  css  js  c++  java
  • python中json.dumps()和json.dump() 以及 json.loads()和json.load()的区分

    在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象。在python的标准库中,专门提供了json库与pickle库来处理这部分。
    

    json的dumps方法和loads方法,可实现数据的序列化和反序列化。具体来说,dumps方法,可将json格式数据序列为Python的相关的数据类型;loads方法则是相反,把python数据类型转换为json相应的数据类型格式要求。在序列化时,中文汉字总是被转换为unicode码,在dumps函数中添加参数ensure_ascii=False即可解决

    1.json.dumps()和json.loads()是json格式处理函数

    json.dumps()----将Python的字典数据转换成json字符,数据的最外面都添加一层""变为字符串,这也是数据的序列化步骤
    (1)情况一

    import json
    
    data = {
        'id': 1,
        'name': 'test1',
        'age': '1'
    }
    
    json_str1 = json.dumps(data)
    print(type(json_str1), '	', repr(json_str1))
    
    <class 'str'> 	 '{"id": 1, "name": "test1", "age": "1"}'
    

    (2)情况二:

    • import json
      
      # python列表(字典)类型转换为json字符串
      data1 = [{
          "id": 1,
          "name": "test1",
          "age": "1"
      }, {
          "id": 2,
          "name": "test2",
          "age": "2"
      }]
      
      json_str1 = json.dumps(data1)		//转化为json字符串
      print("数据类型:", type(data1), repr(data1))
      print("json字符串:", repr(json_str1))
      

       最终结果:

    • 数据类型: <class 'list'> [{'id': 1, 'name': 'test1', 'age': '1'}, {'id': 2, 'name': 'test2', 'age': '2'}]
      json字符串: '[{"id": 1, "name": "test1", "age": "1"}, {"id": 2, "name": "test2", "age": "2"}]'
      
    • json.loads()----将json字符串数据转换为字典或列表(去掉外面一层""),这个也是反序列化的步骤。
      import json
      
      data1 = '''[{
          "id": 1,
          "name": "test1",
          "age": "1"
      }, {
          "id": 2,
          "name": "test2",
          "age": "2"
      }]'''
      
      # # 将json字符串转换为python列表
      data2 = json.loads(data1)		
      print("data2['name']: ", data2[0]["name"])
      print("data2['name']: ", data2[1]["name"])
      

      最终结果

    • data2['name']:  test1
      data2['name']:  test2
      

      ps://json.loads()里面必须是字符串,如果是列表会报错

    • **TypeError: the JSON object must be str, bytes or bytearray, not 'list'**
      

      2.读取excel时候常见的坑

      ####(1)excel里面,如果保存的字典如下面所示:
      {‘name’:‘alien’ , ‘age’:18}
      如上的字典,从excel读取完之后,是不能转换成字典dict的
      花括号里面需要使用双引号“”,然后再使用json.loads(目标数据),这样才能转化成字典类型,否者不行

      3.json.dump()和json.load()主要用来读写json文件函数

      (1)json.dump()是写入文件

      # coding: utf-8
      import json
      
      list = ['Apple', 'Huawei', 'selenium', 'java', 'python']
      
      # 写入文件,alien.txt文件最初是空白文件
      with open('/Users/test/Python_AutoTest/utilts/alien.txt', 'w') as f:
          json.dump(list, f)
      
      # 读取文件
      with open('/Users/test/Python_AutoTest/utilts/alien.txt', 'r') as f:
          print(f.read())
      

      最终结果

    • ["Apple", "Huawei", "selenium", "java", "python"]
      

      ####(2)json.load()读取文件信息

    • # coding: utf-8
      import json
      
      list = ['Apple', 'Huawei', 'selenium', 'java', 'python']
      
      
      # 读取文件
      with open('/Users/test/Python_AutoTest/utilts/alien.txt', 'r') as f:
          result = json.load(f)
          print(result)
      

      最终结果

    • ['Apple', 'Huawei', 'selenium', 'java', 'python']
      
  • 相关阅读:
    机器学习系列(4) 线性回归
    MYSQL系列(5) 电商常用指标查询
    MYSQL系列(4) 关于时间函数的一些写法
    快速排序
    选择排序
    希尔排序
    直接插入排序
    冒泡排序
    Java修饰符大汇总
    字符串实现大数的相加
  • 原文地址:https://www.cnblogs.com/sucretan2010/p/14808253.html
Copyright © 2011-2022 走看看