JSON 序列化的应用举例

JSON是一种轻量级的数据交换格式,常用于互联网数据传输,便于人阅读和机器解析。Python中的json模块提供了dumps()和loads()函数进行序列化和反序列化操作。此外,文章提到了Google的ProtocolBuffer作为另一种高性能的二进制序列化工具。
摘要由CSDN通过智能技术生成

        JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它的设计意图是把所有事情都用设计的字符串来表示,这样既方便在互联网上传递信息,也方便人进行阅读(相比一些 binary 的协议)。JSON 在当今互联网中应用非常广泛,也是每一个用 Python程序员应当熟练掌握的技能点。

        设想一个情景,你要向交易所购买一定数额的股票。那么,你需要提交股票代码、方向(买入/卖出)、订单类型(市价/限价)、价格(如果是限价单)、数量等一系列参数,而这些数据里,有字符串,有整数,有浮设想一个情景,你要向交易所购买一定数额的股票。那么,你需要提交股票代码、方向(买入/卖出)、订单类型(市价/限价)、价格(如果是限价单)、数量等一系列参数,而这些数据里,有字符串,有整数,有浮点数,甚至还有布尔型变量,全部混在一起并不方便交易所解包。点数,甚至还有布尔型变量,全部混在一起并不方便交易所解包。

        那该怎么办呢?

        JSON ,正能解决这个场景。你可以把它简单地理解为两种黑箱:

  • 第一种,输入这些杂七杂八的信息,比如Python 字典,输出一个字符串;

  • 第二种,输入这个字符串,可以输出包含原始信息的 Python 字典。

import json

params = {
    'symbol': '123456',
    'type': 'limit',
    'price': 123.4,
    'amount': 23
}

params_str = json.dumps(params)

print('after json serialization')
print('type of params_str = {}, params_str = {}'.format(type(params_str), params))

original_params = json.loads(params_str)

print('after json deserialization')
print('type of original_params = {}, original_params = {}'.format(type(original_params), original_params))

########## 输出 ##########

after json serialization
type of params_str = <class 'str'>, params_str = {'symbol': '123456', 'type': 'limit', 'price': 123.4, 'amount': 23}
after json deserialization
type of original_params = <class 'dict'>, original_params = {'symbol': '123456', 'type': 'limit', 'price': 123.4, 'amount': 23}

其中,

  • json.dumps() 这个函数,接受 Python 的基本数据类型,然后将其序列化为 string;

  • 而json.loads() 这个函数,接受一个合法字符串,然后将其反序列化为 Python 的基本数据类型。

是不是很简单呢?

        不过还是那句话,请记得加上错误处理。不然,哪怕只是给 json.loads() 发送了一个非法字符串,而你没有 catch 到,程序就会崩溃了。

        到这一步,你可能会想,如果我要输出字符串到文件,或者从文件中读取JSON字符串,又该怎么办呢?

        是的,你可以使用open() 和 read()/write() ,先将字符串读取/输出到内存,再进行JSON编码/解码,当然这有点麻烦。

import json

params = {
    'symbol': '123456',
    'type': 'limit',
    'price': 123.4,
    'amount': 23
}

with open('params.json', 'w') as fout:
    params_str = json.dump(params, fout)

with open('params.json', 'r') as fin:
    original_params = json.load(fin)

print('after json deserialization')
print('type of original_params = {}, original_params = {}'.format(type(original_params), original_params))

########## 输出 ##########

after json deserialization
type of original_params = <class 'dict'>, original_params = {'symbol': '123456', 'type': 'limit', 'price': 123.4, 'amount': 23}

        这样,我们就简单清晰地实现了读写 JSON 字符串的过程。当开发一个第三方应用程序时,你可以通过 JSON 将用户的个人配置输出到文件,方便下次程序启动时自动读取。这也是现在普遍运用的成熟做法。

        那么 JSON 是唯一的选择吗?显然不是,它只是轻量级应用中最方便的选择之一。据我所知,在 Google,有类似的工具叫做Protocol Buffer,当然,Google 已经完全开源了这个工具,你可以自己了解一下使用方法。

        相比于 JSON,它的优点是生成优化后的二进制文件,因此性能更好。但与此同时,生成的二进制序列,是不能直接阅读的。它在 TensorFlow 等很多对性能有要求的系统中都有广泛的应用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_64880493_江哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值