json.dump 在看似有效的对象上抛出“TypeError:{...} 不是 JSON 可序列化”?

2024-01-20

背景:我正在编写一个 python 程序来管理我的音乐文件。它抓取目录并将文件及其元数据(通过诱变剂)以 JSON 编码,作为简单的“数据库”放入文件中。我的目录搜索很好,但是当我尝试保存数据库或编码为 JSON 时,它会抛出“TypeError: {...} 不是 JSON 可序列化” (...是字典中的一些键和值,更多内容如下)

问题:程序按照以下格式构建一个大字典对象:

{
    "<song id>":{
        "artist":"<song artist>",
        "album":"<song album>",
        "title":"<song title>"},
    ...
}

每个歌曲文件都通过这种格式进行索引。当我尝试将数据库转储到文件时,我得到以下信息:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    sit()
  File "D:\workbench\ideas\musicmanager\v0\spider.py", line 116, in sit
    json.dump(js.db,f,True)
  File "C:\Python27\lib\json\__init__.py", line 181, in dump
    for chunk in iterable:
  File "C:\Python27\lib\json\encoder.py", line 428, in _iterencode
    for chunk in _iterencode_dict(o, _current_indent_level):
  File "C:\Python27\lib\json\encoder.py", line 402, in _iterencode_dict
    for chunk in chunks:
  File "C:\Python27\lib\json\encoder.py", line 402, in _iterencode_dict
    for chunk in chunks:
  File "C:\Python27\lib\json\encoder.py", line 436, in _iterencode
    o = _default(o)
  File "C:\Python27\lib\json\encoder.py", line 178, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: {'album': [u"Rooney's Lost Album"], 'title': [u'The Kids
After Sunset'], 'artist': [u'Rooney']} is not JSON serializable

该特定歌曲条目的密钥是

Rooney|Rooney's Lost Album|The Kids After Sunset|The Kids After Sunset.itunes.mp3

(id 的格式有点庞大,我可能最终会对其进行散列......)

所以我尝试

json.dumps({'album': [u"Rooney's Lost Album"], 'title': [u'The Kids
After Sunset'], 'artist': [u'Rooney']})

效果很好,也是如此

json.dumps({"Rooney|Rooney's Lost Album|The Kids After Sunset|The Kids
After Sunset.itunes.mp3":""})

然后我尝试了这个:

rooney = "Rooney|Rooney's Lost Album|The Kids After Sunset|The Kids
    After Sunset.itunes.mp3"
json.dumps({rooney:js.db['songsbyid'][rooney]})

再次因类型错误而失败。

为什么该对象会因 json.dump 失败?我有很多其他对象的键包含管道“|”和撇号“'”...目前,我没有办法让其他人测试这个,我应该发布数据库对象的腌制版本吗?

补充笔记

  • json.dumps 下面的结果对象很好,所以我想知道这个问题是否与数据库的大小有任何关系?

    {鲁尼:js.db['songsbyid'][鲁尼]} {“鲁尼|鲁尼丢失的专辑|日落后的孩子们|孩子们 After Sunset.itunes.mp3": {'album': [u"鲁尼丢失的专辑"], “标题”:[u“日落后的孩子们”],“艺术家”:[u“鲁尼”]}}

  • 如果我通过重命名扩展名来排除歌曲,以便脚本忽略它,则另一首任意歌曲会导致相同的错误。我重命名并排除了这首新歌,然后遇到了另一首新歌......我不知道有多少首。

  • 我更改了程序以抓取包含原始问题歌曲的下一个最远的子目录,并且 json.dump 在完全不同的歌曲上引发了 TypeError...


因为它实际上不是一本字典;而是一本字典。这是另一种映射类型looks就像一本字典。使用type()核实。传递给dict()从中得到一本真正的词典。

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

json.dump 在看似有效的对象上抛出“TypeError:{...} 不是 JSON 可序列化”? 的相关文章

随机推荐

  • 发送 HTTP 标头后,服务器无法附加标头

    下面显示的是我创建 CSV 文件后的代码 我想下载该文件 所以我使用下面的代码 但它在 Response AddHeader Content disposition attachment filename fileCSV 处抛出错误 服务器
  • ZF2:如何实现自定义过滤器?

    我已经使用 Zend Framework 2 几个星期了 尽管在线文档相当不完整 但我还是成功地构建了我的网站的初稿 不幸的是 我在尝试实现 Zend Filter File Rename 过滤器的自定义版本时陷入困境 在这里我总结一下我所
  • 将从文件读取的 True/False 值转换为布尔值

    我正在读一本True False文件中的值 我需要将其转换为布尔值 目前它总是将其转换为True即使该值设置为False 这是一个MWE我正在尝试做的事情 with open file dat mode r as f for line in
  • 使用 DAG 的 Condor 作业以及一些需要运行同一主机的作业

    我有一个计算任务 它被分成几个具有依赖性的单独程序执行 我使用 Condor 7 作为任务调度程序 使用 Vanilla Universe 由于对程序的限制超出了我的能力范围 因此不涉及检查点 因此 DAG 看起来像是一个自然的解决方案 然
  • 在 Delphi XE 中使用通用容器 - 总是吗?

    当拥有一个项目以及这些项目的强类型列表时 通用容器可以节省时间 它节省了创建可能带有 TList 内部变量的新类的重复编码 以及类型化的 Add Delete 类型方法 以及其他好处 例如通用容器类提供的所有新功能 但是 是否建议以后始终对
  • 如何更改 WPF ComboBox 中选定文本的颜色?

    在我的应用程序中 我为 TextBlock 定义了以下样式
  • 使用 PHP 将数据添加到 csv 文件的特定列中

    我有一个 csv 文件 有 14 列和数百行 有一个标题是 sku category description brand etc 所有数据都已存在 但我正在尝试在 CSV 中的某些特定列中添加一些图像文件名 images small ima
  • 连接多个字符串与 String.Format [重复]

    这个问题在这里已经有答案了 这里有两种结果相同的方法 public class MessageManager public void SendMessage string name int count string message Hi n
  • 使用 TLS 的 node.js mqtt 客户端

    我正在尝试使用下面的包来实现带有 TLS 的 node js mqtt 客户端 https www npmjs com package mqtt client https www npmjs com package mqtt client
  • 将字符串格式的 url 的 DataFrame 正确转换为 JSON

    我有一个包含 2 列的数据框 其中一列由 URL 组成 示例代码 df pd DataFrame columns name image df df append name sample name image https images pex
  • 元组列表到数据帧的转换[重复]

    这个问题在这里已经有答案了 我有一个类似于以下内容的元组列表 date1 ticker1 value1 date1 ticker1 value2 date1 ticker1 value3 我想将其转换为 DataFrameindex dat
  • 如何在PHP中获取新推送项目的数字键?

    arr new item 是否可以通过编程方式获取新推送的项目 请注意 这不是必需的count arr 1 arr 1 2 arr new item 在上面的例子中 就是2 end 完成工作 返回价值 如果对你有帮助 您可以使用key 之后
  • RuntimeBinderException - C# .NET 4 动态关键字 - 帮助我理解为什么方法不匹配

    我为 HttpModule 构建了一个通用配置系统 允许可插入的 HTTP 标头检查器 作为参考 这里是代码的基本布局 这应该足以让我了解我正在做的事情 public interface IHttpHeaderInspectingAuthe
  • 如何为我的 Java 应用程序指定一个唯一的进程名称?

    我注意到 当我启动 Netbeans 时 它在任务管理器中显示为netbeans exe因为我自己的所有 Java 应用程序都显示为java exe or javaw exe 我怎样才能改变它 以便我的进程名称显示为myapp exe 进程
  • 在 R 中创建空间数据

    我有一个 100 x 200 米区域内物种及其大致位置的数据集 数据框的位置部分不是我认为可用的格式 在这个 100 x 200 米的矩形中 有 200 个 10 x 10 米的正方形 分别命名为 A 到 CV 每个 10 x 10 的正方
  • 如何动态添加导航栏到 jQuery Mobile 应用程序

    如何动态地将导航栏添加到我的 jquery 移动应用程序中 我希望能够从 javascript 将导航栏元素添加到 dom 然后解析它们 我发现我可以根据需要将元素添加到 DOM 然后在元素上调用 navbar 它将执行导航栏解析 例如我可
  • Ormlite Android 批量插入

    谁能解释一下为什么我的插入在 Ormlite 中花费了这么长时间 在桌面上的一个 SQLite 事务中执行 1 700 次插入只需不到一秒 然而 当使用 Ormlite for Android 时 大约需要 70 秒 并且我可以在调试消息中
  • .NET几何库[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在 NET 中启动一个新项目 该项目需要一些几何算法 例如 检查点是否在多边形内部 贝塞尔曲线 线交
  • 在 C# 类库中使用 MATLAB MWArray.dll

    我正在尝试使用 dll 在 MATLAB 中使用 Matlab net Complier 构建 C 类库 但是每次初始化 MWArray dll 中的对象时程序都会引发异常 例如 MWNumericArray m new MWNumeric
  • json.dump 在看似有效的对象上抛出“TypeError:{...} 不是 JSON 可序列化”?

    背景 我正在编写一个 python 程序来管理我的音乐文件 它抓取目录并将文件及其元数据 通过诱变剂 以 JSON 编码 作为简单的 数据库 放入文件中 我的目录搜索很好 但是当我尝试保存数据库或编码为 JSON 时 它会抛出 TypeEr