我一直在尝试使用 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/