通过固定大小的python数据套接字发送整数

时间:2018-12-04 19:59:34

标签: python sockets labview

我一直在尝试使用json.dumps通过套接字向LabVIEW客户端发送一些整数值,但是随着数字的变化,每个字段的大小可能会变化,我想知道是否有一种填充方法进行json转储时,将带有'0'的数字转换为字符串,因为它将" "添加到每个数字周围发送的数据包中。

示例:

data = json.dumps({"Data": str(52).zfill(4)]})
self.sock.send(data.encode())

这发送

'"Data":"0052"'

我想要

'"Data": 0052'

1 个答案:

答案 0 :(得分:1)

正如@jsonharper所述,从技术上讲,您要的不再是JSON,more on that here

但是,这并不意味着您不能使用json库来为您完成大部分工作!

您可以通过将自定义编码器类传递给json.dumps来实现此目的,

>>> import json

>>> class MyInt(int):
...     def __str__(self):
...         return '{:0>4}'.format(self)

>>> class MyEncoder(json.encoder.JSONEncoder):
...     def default(self, o):
...         if isinstance(o, MyInt):
...             return str(o)
...         return super(MyEncoder, self).default(o)

>>> obj = {'Data': MyInt(52)}
>>> json.dumps(obj, cls=MyEncoder)
'{"Data": 0052}'

您可以对任何类进行此操作,但是可以导致某些内容无法使用严格的JSON解码器再次解码。

查看是否可以使LabVIEW读取标准JSON,但如果没有,则上述方法应该可以工作。