0

如果之前已经解决过这个问题,请原谅我,但是如何在 python 应用程序(套接字)中组织客户端和服务器之间交换的数据?

假设我有一些必须发送的元素 - 字符串、元组、字典:

"hello world", (1, 2, 3), {"k": "v"}

我目前所做的只是将所有内容都转换为字符串 -repr()在发送之前和eval()接收之后调用。这显然显得有些多余。

我应该如何发送这些数据块?有约定吗?首选格式?我该如何压缩它?

4

3 回答 3

3

JSON 是您正在寻找的。如果您有一个对象并导入 JSON 函数:

from json import dumps, loads

您可以使用它dumps(obj)来编码为 JSONloads(str)并将 JSON 字符串转换回对象。例如:

dumps([[1,2,3],{"a":"b", "c":"d"}])

产量'[[1, 2, 3], {"a": "b", "c": "d"}]'

loads('[[1, 2, 3], {"a": "b", "c": "d"}]')

产量[[1, 2, 3], {u'a': u'b', u'c': u'd'}]

于 2013-08-01T20:32:35.467 回答
1

最简单的方法是在客户端腌制它们并在服务器端取消腌制它们。但是,需要确保数据来自受信任的来源,因为可以强制 unpickle 执行任意代码。确保你使用cPickle了 C 语言实现。

于 2013-08-01T20:30:31.267 回答
1

永远不 eval()应该从不受信任的来源获得数据,这意味着您永远不应该eval()通过不安全的网络连接到达任何东西(或者您不能绝对确定另一端的实体是谁或它所说的内容)。

显而易见的解决方案是在一端将数据编码为 JSON,并在另一端对其进行解码(除非您有特定的性能要求,需要高度压缩的格式,例如msgpack)。

于 2013-08-01T20:31:53.880 回答