zoukankan      html  css  js  c++  java
  • json序列化 & 反序列化

    json序列化:

      json的dumps方法可以将json格式数据序列为python的相关数据类型,比如str,常用于打印,另外,在序列化时,中文汉字被转换为unicode编码,在dumps函数中添加参数ensure_ascii=False可解决;dumps的indent参考可以调整显示格式,即缩进,一般设置为2。【字典中键值对,不管是单还是双引号,dumps后,都是双引号

    json反序列化:

      json的loads方法可以把python数据类型转换为json相应的数据类型格式,反序列化后可以对json数据进行各种操作;反序列化时,键值数据不能用双引号,只能用单引号(如果是双引号,可以用eval)。

    键值对如果是单引号,loads报错:

    json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
    

      

    import json
    
    print('字典'.center(10,'*'))
    s1 = '{"tom":{"age":18,"sex":"男"},"jack":{"age":19,"sex":"女"}}'
    s2 = "{'tome':{'age':18,'sex':'男'},'jack':{'age':19,'sex':'女'}}" # 字符串通过json.loads转字典的时候,字符串里面不能为单引号,打印s2会报错
    print(json.loads(s1), type(json.loads(s1)))
    # 用dumps,字典中键值变成双引号
    print(json.dumps(json.loads(s1)), type(json.dumps(json.loads(s1))))
    print(json.dumps(json.loads(s1),ensure_ascii=False), type(json.dumps(json.loads(s1),ensure_ascii=False)))
    print(json.dumps(json.loads(s1),ensure_ascii=False,indent=2))
    # 用str,字典中键值依旧是单引号
    print(str(json.loads(s1)), type(str(json.loads(s1))))
    
    # print(json.loads(s2)) # 报错
    # 但是,可以通过eval将s2转换为字典
    print(eval(s2), type(eval(s2)))
    # dumps会将中文转换成unicode编码,加参数ensure_ascii=False解决
    print(json.dumps(eval(s2)), type(json.dumps(eval(s2))))
    print(json.dumps(eval(s2),ensure_ascii=False), type(json.dumps(eval(s2),ensure_ascii=False)))
    
    print('字符串--列表'.center(10,'*'))
    la = '[1,2,3,4]'
    lb = "[1,2,3,4]"
    print(eval(la), type(eval(la)))
    print(json.loads(la), type(json.loads(la))) # 字符串转列表[1, 2, 3, 4] <class 'list'>
    print(json.dumps(json.loads(la)),type(json.dumps(json.loads(la)))) # 列表转字符串,[1, 2, 3, 4] <class 'str'>
    print(eval(lb), type(eval(lb)))
    print(json.loads(lb), type(json.loads(lb))) # 字符串转列表[1, 2, 3, 4] <class 'list'>
    print(json.dumps(json.loads(lb)),type(json.dumps(json.loads(lb)))) # 列表转字符串,[1, 2, 3, 4] <class 'str'>
    
    print('列表--字符串'.center(10,'*'))
    user_list = ['tom', 'jack']
    user_list2 = ["tom", "jack"]
    print(type(json.dumps(user_list)), json.dumps(user_list))  # 列表转字符串 <class 'str'> ["alex", "jason"]
    print(type(json.dumps(user_list2)), json.dumps(user_list2))
    print(type(json.dumps(user_list2)), str(user_list2)) # 双引号变单引号
    
    print('导入、导出'.center(10,'*'))
    dic = {'k1': 1, 'k2': 2}
    json.dump(dic, open('db', 'w'))  # 将字典序列化导入文件,写入字符串
    r = json.load(open('db', 'r'))  # 反序列化从文件中导出
    print(r, type(r))  # {'k1': 1, 'k2': 2} <class 'dict'>
    

      

  • 相关阅读:
    .ssh/config 文件的解释算法及配置原则
    不fq安装 golang tools
    iOS 组件化的几篇文章
    第一把机械键盘 ikbc C-87
    我推荐的 Java Web 学习路线
    【吐槽向】iOS 中的仿射变换
    Spring 对缓存的抽象
    Spring 事务管理笔记
    Swift 笔记汇总
    Java 类加载器
  • 原文地址:https://www.cnblogs.com/uncleyong/p/7012042.html
Copyright © 2011-2022 走看看