zoukankan      html  css  js  c++  java
  • Python 类对象的JSON序列化与反序列化

    1. Python 类对象

    class Token:
      def __init__(self, name, address, symbol, decimals):
        self.name = name
        self.address = address
        self.symbol = symbol
        self.decimals = decimals
    

    2. JSON 序列化Token对象

    import json
    
    token = Token('Tether USD', '0xdac17f958d2ee523a2206206994597c13d831ec7', 'USDT', 6)
    json.dumps(token)
    # TypeError: Object of type Token is not JSON serializable
    

    3. JSON.dumps 定义

    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)
        Serialize ``obj`` to a JSON formatted ``str``.
    ...
    ``default(obj)`` is a function that should return a serializable version of obj or raise TypeError. The default simply raises TypeError.
    # 可参数default用于把任意一个对象变成一个可序列为JSON的对象
    ....
    

    4. JSON 序列化类对象

    json.dumps(u, default=lambda obj: obj.__dict__, sort_keys=True)
    # output:
    # '{"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7", "decimals": 6, "name": "Tether USD", "symbol": "USDT"}'
    

    5. JSON.loads定义

    loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
        Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance containing a JSON document) to a Python object
    ``object_hook`` is an optional function that will be called with the result of any object literal decode (a ``dict``). The return value of
        ``object_hook`` will be used instead of the ``dict``. This feature can be used to implement custom decoders (e.g. JSON-RPC class hinting).
    ...
    

    6. JSON反序列为类对象

    def handle(t):
      return Token(t['name'], t['address'], t['symbol'], t['decimals'])
    
    json_str = '{"address": "0xdAC17F958D2ee523a2206206994597C13D831ec7", "decimals": 6, "name": "Tether USD", "symbol": "USDT"}'
    token = json.loads(json_str, object_hook=handle)
    

    7. 参考

  • 相关阅读:
    dom元素和方法总结
    jQuery插件开发
    单次遍历,带权随机选取问题
    转:面试中常见的一些算法问题
    树状数组资料
    逆序数的求法
    将n进制的数组压缩成字符串(0-9 a-z)同一时候解压
    [积累]C++复习 海大2014硕士生面试题微信系统总结
    记一个手游app数据文件的破解
    poj1189 简单dp
  • 原文地址:https://www.cnblogs.com/yueyun00/p/14991745.html
Copyright © 2011-2022 走看看