如何在python中将任意文件类型序列化为json字符串

2024-01-31

我的服务器将通过套接字将序列化为字符串的 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'])

I'd use base64。 JSON 并非设计用于通信二进制数据。因此,除非您的文件内容是普通文本,否则“应该”对其进行编码以使用普通文本。几乎所有东西都可以编码和解码base64。如果您改为使用(例如)Pythonrepr(file_content),这也会产生“纯文本”,但接收端需要知道如何解码Python转义的字符串repr() uses.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在python中将任意文件类型序列化为json字符串 的相关文章

随机推荐

  • Docker BuildKit --mount=type=cache 不起作用,为什么?

    我正在尝试实施Buildkit 的缓存挂载功能 https github com moby buildkit blob master frontend dockerfile docs experimental md run mounttyp
  • 多个源代码存储库

    我使用 Mercurial 对源代码进行版本控制 但有些人更喜欢其他版本控制系统 如 git Bazaar SVN CVS 我想知道 是否可以同时将一个存储库存储在多个系统下 以便人们可以使用他们想要的任何存储库 GitHub 开发了hg
  • Nginx 无法加载 CSS 和 JS 文件(MIME 类型错误)?

    我的网站上出现以下错误 Error There are multiple templates named velvet Each template needs a unique name 1b1a247fc034d5089f331ec954
  • 如何在 Angularjs 中使用 $event 更新事件点击时的 ng-model

    http plnkr co ywhmyO http plnkr co ywhmyO 我尝试过编译和指令 但一无所获 示例中的编译代码是直接从 Angular 网站上撕下来的 但我不知道如何使用它 非常感谢任何指导 你被这样的事实绊倒了ng
  • 如何在类图中显示单例关系

    如果一个类包含指向单例类的指针 它可以是aggregation 据我了解 这不可能是has a关系 因为该类不会创建单例类的实例 它只是像这样使用它association关系 标题并不像所写的那样100 完全有意义 有单例类 但没有真正的单
  • 以编程方式设置 GoogleMapOptions

    我像这样膨胀我的片段 GoogleMap map MapFragment getFragmentManager findFragmentById R id MapFragment map Fragment getMap 在这里我有我的选择
  • Lambda 日志和 CloudWatch PutLogEvents 限制

    I know Lambda 调用PutLogEvents在内部记录消息 CloudWatch 有限制PutLogEvents PutLogEvents 每个日志流每秒 5 个请求 我想知道 Lambda 日志流也可以被限制吗PutLogEv
  • Javascript 将 unicode 字符串转换为“标题大小写”

    我有一个 javascript 大小写转换问题 由于非英文字母 我无法解决该问题 我主要关心的是土耳其字母 我需要做的是这样的 你好世界 gt 你好世界 你好世界 gt 你好世界 你好世界 gt 你好世界 这是我到目前为止所取得的成就 St
  • Rails + Rspec + 机架 + 会话测试

    Gemfile 文件 机架 gt 1 6 0 我在将会话变量从 rspec 测试传递到 Rack 中间件时遇到了一些问题 我在互联网上浏览了很多文章 但没有任何解决方案可以帮助我理解 所以基本上我希望能够在我的中间件类中做到这一点 req
  • Grizzly / Glassfish - 无法建立 websockets 握手

    我正在尝试让 WebSockets 在 Grizzly Glassfish 之上工作 我已经克隆了示例 WebSockets 聊天应用程序 http java net projects grizzly sources git show sa
  • realloc() 旧大小无效

    我正在做 K R C 编程书中的一个练习 该程序用于从用户输入的一组行中找到最长的行 然后打印它 这是我写的 部分内容直接摘自书中 include
  • 将值插值作为属性组件

    我有一个关于 Angular2 中的插值是如何完成的问题 例如 我有组件 X 其值为 Input 在父组件中我有这样的代码
  • 如何在保持纵横比的同时将 div 包含在视口内

    存在一个正方形 div 其宽度为任意百分比 并且高度相同 需要随窗口缩放 它必须保持在视口的范围内 即 不剪裁到外部 并保持其正方形形状 本质上是复制background size contain CSS 的特性 我需要支持iOS Safa
  • 什么是 Java EE? [复制]

    这个问题在这里已经有答案了 我意识到它的字面意思是 Java 企业版 但我要问的是 这到底意味着什么 当公司需要 Java EE 经验时 他们真正需要的是什么 有使用 EJB 的经验吗 有 Java Web 应用程序经验吗 我怀疑这对不同的
  • 无法解码 JSON 对象:期望值:第 1 行第 1 列(字符 0)

    这个问题有点重复 但我找不到解决方案 当我调用 Flask 应用程序并传递 JSON 数据时 出现错误 Failed to decode JSON object Expecting value line 1 column 1 char 0
  • 以特定方式将 String 转换为 NSAttributedString

    所以我有一个看起来像这样的字符串 Swift VisualBasic Ruby i wanna convert this string to something like this 基本上我想在单个单词后面创建一个背景 是的 我可以使用 N
  • Angular 2 库配置

    目前我正在尝试创建我的第一个 Angular 2 库 即翻译管道 现在我正在尝试让开发人员能够将带有翻译的对象插入到模块中 以便管道可以使用它 如何将某种配置 对象插入到我的库中 以便我的所有组件 管道和服务都可以使用它 我的图书馆看起来像
  • 如何设置文件上传的样式?

    在 Firefox 中 它看起来像一个您单击的文本字段 我只需要一个像 Safari 渲染这样的按钮 有没有办法不显示在 Firefox 中查找文件上传的文本字段 之前问过很多次 如何在 Firefox 中设置文件输入字段的样式 https
  • 如何轻松修复过去的提交?

    我刚刚读过修改 git 中过去提交的单个文件 https stackoverflow com questions 493450 amending a single file in a past commit in git但不幸的是 接受的解
  • 如何在python中将任意文件类型序列化为json字符串

    我的服务器将通过套接字将序列化为字符串的 JSON 发送到另一台客户端计算机 我将获取最终的 json 并执行以下操作 import json python dict obj id 1001 name something file