请原谅我,如果之前已经解决了这个问题,但是如何在python应用程序(套接字)中组织客户端和服务器之间交换的数据?
假设我有一些我必须发送的元素 - 字符串,元组,dicts:
"hello world", (1, 2, 3), {"k": "v"}
我目前所做的只是将所有内容转换为字符串 - 在发送之前调用repr()
,在收到之后调用eval()
。这显然有点多余。
我应该如何发送这些数据块?有会议吗?首选格式?我该如何压缩它?
答案 0 :(得分:3)
JSON正是您所需要的。如果您有一个对象并导入JSON函数:
from json import dumps, loads
您可以使用dumps(obj)
编码为JSON,并使用loads(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'}]
。
答案 1 :(得分:1)
最简单的方法是在客户端pickle使用它们并在服务器端取消它们。但是,需要确保数据来自可信来源,因为可以强制执行任意代码的unpickle。确保使用cPickle
来实现C语言。
答案 2 :(得分:1)
你应该never eval()
data from an untrusted source,这意味着你永远不应该eval()
通过不安全的网络连接到达任何东西(或者你不能完全确定另一端的实体是谁或它说的是什么它是。)
这里显而易见的解决方案是在一端encode the data as JSON,在另一端解码它(除非您有特定的性能要求,需要高度压缩的格式,例如msgpack)。