9

我的服务器将通过套接字向另一台客户端计算机发送一个序列化为字符串的 JSON。我将使用我的最终 json 并执行此操作:

import json
python_dict_obj = { "id" : 1001, "name" : "something", "file" : <???> }
serialized_json_str = json.dumps(python_dict_obj)

我想让我的 JSON 中的一个字段的值是一个文件,编码为一个字符串。

性能方面(但也是互操作性方面)使用 python 编码文件的最佳方法是什么?Base64?二进制?只是原始字符串文本?

编辑 - 对于那些建议 base64,是这样的吗?

# get file
import base64
import json

with open(filename, 'r') as f:
    filecontents = f.read()
encoded = base64.b64encode(filecontents)
python_dict_obj['file'] = encoded
serialized_json_str = json.dumps(python_dict_obj)

# ... sent to client via socket

# decrpyting
json_again = json.loads(serialized)
filecontents_again = base64.b64decode(json_again['file'])
4

2 回答 2

7

我会用base64. JSON 不是为传递二进制数据而设计的。因此,除非您的文件内容是原版文本,否则“应该”对其进行编码以使用原版文本。几乎所有东西都可以编码和解码base64。如果您改为使用(例如)Python 的repr(file_content),那也会产生“纯文本”,但接收端需要知道如何解码字符串以逃避 Python 的repr()使用。

于 2013-10-03T02:58:10.473 回答
3

JSON 无法处理二进制文件。您需要在序列化之前将数据编码为文本,最简单的编码方式是 Base64。您不需要使用 URL 安全的编码形式,除非在处理链的下游有要求。

于 2013-10-03T02:52:50.567 回答