我一直在尝试使用json.dumps
通过套接字向LabVIEW客户端发送一些整数值,但是随着数字的变化,每个字段的大小可能会变化,我想知道是否有一种填充方法进行json转储时,将带有'0'的数字转换为字符串,因为它将" "
添加到每个数字周围发送的数据包中。
示例:
data = json.dumps({"Data": str(52).zfill(4)]})
self.sock.send(data.encode())
这发送
'"Data":"0052"'
我想要
'"Data": 0052'
答案 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,但如果没有,则上述方法应该可以工作。