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

标签 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'

最佳答案

正如@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,但如果不能,上面的方法应该可以。

关于python - 通过固定大小的python数据套接字发送整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53620555/

相关文章:

python - 即使由于 dagbag 错误而从 UI 手动触发了 dags,Airflow 也不会触发 dags

LabView TCP 连接

c - sockaddr_in 的 pad 是做什么用的?

java - ReadableByteChannel.read()为什么会出现IOExceptions

java - 套接字 API SocketImpl

Python 列表到 XML,反之亦然

object - LabVIEW 对象

python - 迭代多个 numpy 数组并处理当前和先前元素的有效方法?

python - 主 Y 轴的绘图标签不显示

python - 快速解析类似 csv 的文件