zoukankan      html  css  js  c++  java
  • json中load和loads区别

    相同点

    1. dump 和 dumps 都实现了序列化
    2. load 和 loads 都实现反序列化

    变量从内存中变成可存储或传输的过程称之为序列化
    序列化是将对象状态转化为可保存或可传输格式的过程。

    变量内容从序列化的对象重新读到内存里称之为反序列化
    反序列化是流转换为对象。

    区别

    1. load 和 loads (反序列化)
    load:针对文件句柄,将json格式的字符转换为dict,从文件中读取 (将string转换为dict)

    1
    a_json = json.load(open('demo.json','r'))

    loads:针对内存对象,将string转换为dict (将string转换为dict)

    1
    a = json.loads('{'a':'1111','b':'2222'}')

    2. dump 和 dumps(序列化)

    dump:将dict类型转换为json字符串格式,写入到文件 (易存储)

    1
    2
    a_dict = {'a':'1111','b':'2222'}
    json.dump(a_dict, open('demo.json', 'w')

    dumps:将dict转换为string (易传输)

    1
    2
    a_dict = {'a':'1111','b':'2222'}
    a_str = json.dumps(a_dict)

    总结

    根据序列化和反序列的特性

    loads: 是将string转换为dict
    dumps: 是将dict转换为string
    load: 是将里json格式字符串转化为dict,读取文件
    dump: 是将dict类型转换为json格式字符串,存入文件

    JSON进阶
    序列化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 使用class对象的__dict__方法
    class Student(object):
    def __init__(self, name, age, score):
    self.name = name
    self.age = age
    self.score = score
    import json
    s = Student('Bob', 20, 88)
    print(json.dumps(s, default=lambda obj: obj.__dict__))

    反序列化

    1
    2
    3
    4
    5
    def dict2student(d):
    return Student(d['name'], d['age'], d['score'])

    json_str = '{"age": 20, "score": 88, "name": "Bob"}'
    print(json.loads(json_str, object_hook=dict2student))

    python中的序列化和反序列化

    Python提供两个模块来实现序列化:cPickle和pickle。这两个模块功能是一样的,区别在于cPickle是C语言写的,速度快,pickle是纯Python写的,速度慢。

    1. 变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling
    2. 变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling
    1
    2
    3
    4
    try:
    import cPickle as pickle
    except ImportError:
    import pickle

    1.将内存对象存取到磁盘

    1
    2
    a = dict(a=1, b=2, c=3)
    pickle.dumps(a) # 将对象序列化为str然后存入文件
    1
    2
    a = dict(a=1, b=2, c=3)
    pickle.dump(a, open('a.txt', 'wb')) # 使用dump直接把对象序列化为file-like Object,注意是二进制存储

    2.从磁盘读取到内存对象

    1
    pickle.load(open('a.txt', 'rb'))    #从file-like Object中直接反序列化出对象

     

  • 相关阅读:
    Palindrome Partitioning
    triangle
    Populating Next Right Pointers in Each Node(I and II)
    分苹果(网易)
    Flatten Binary Tree to Linked List
    Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)
    iOS系统navigationBar背景色,文字颜色处理
    登录,注销
    ios 文字上下滚动效果Demo
    经常崩溃就是数组字典引起的
  • 原文地址:https://www.cnblogs.com/gdg87813/p/12105873.html
Copyright © 2011-2022 走看看