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. 参考

  • 相关阅读:
    搭建DG(data guard),及搭建过程中遇到的一些小问题 高伟
    介绍linux下vi命令的使用
    linux gcc编译器使用
    Linux进程编程介绍
    事件与接口实例讲解 C#
    Linux 2.6内核的编译步骤及模块的动态加载
    C# 各种定时器比较 zz
    linux下增加系统调用
    VirtualBox共享文件夹
    C++程序的单元测试(转贴)
  • 原文地址:https://www.cnblogs.com/yueyun00/p/14991745.html
Copyright © 2011-2022 走看看