背景:我正在编写一个python程序来管理我的音乐文件。它抓取目录并将文件及其元数据(通过诱变)以JSON编码,作为一个简单的“数据库”放入文件中。我可以很好地搜索目录,但当我尝试保存数据库或编码为JSON时,它会抛出“TypeError:{...}is not JSON序列化”(...是判决中的一些键和值,更多信息见下文)
问题:程序按照以下格式构建大型dictionary对象:
{
"<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会导致该对象失败。倾倒我还有很多其他对象,其键包含管道“|”和撇号“'”。。。目前,我没有办法让其他人测试这个,我应该发布数据库对象的酸洗版本吗?
其他注释
>
json下面的结果对象。转储很好,所以我想知道这个问题是否与数据库的大小有关?
{鲁尼:js.db['songsbyid'][鲁尼]}{“鲁尼|鲁尼的迷失专辑|日落后的孩子们|日落后的孩子们。itunes.mp3”:{'Album':[u“鲁尼的迷失专辑”],'title':[u“日落后的孩子们],'artist':[u“鲁尼”}
如果我通过重命名扩展名来排除歌曲,使脚本忽略它,则另一首任意歌曲会导致相同的错误。我重命名了
我更改了程序以抓取包含原始问题歌曲的下一个最远子目录,json.dump在完全不同的歌曲上引发了TypeError...
我写了一个类来规范化字典中的数据。下面的NormalizeData类中的“元素”需要是“字符”类型。您需要在__iterate()中替换为您的自定义类对象或您想要规范化的任何其他对象类型。
class NormalizeData:
def __init__(self, element):
self.element = element
def execute(self):
if isinstance(self.element, dict):
self.__iterate()
else:
return
def __iterate(self):
for key in self.element:
if isinstance(self.element[key], <ClassName>):
self.element[key] = str(self.element[key])
node = NormalizeData(self.element[key])
node.execute()
在我的例子中,我的Python语句中的布尔值是问题所在。JSON布尔值是小写的(“true”、“false”),而在Python中它们是大写的(“True”、“False”)。在网上任何地方都找不到这个解决方案,但希望它能有所帮助。
因为它实际上不是一本字典;这是另一种看起来像字典的映射类型。使用type()
进行验证。将其传递到dict()以从中获取真正的字典。
问题内容: 背景 :我正在编写一个应该管理我的音乐文件的python程序。它将爬网目录,并将文件和它们的元数据(通过mutagen)(通过mutagen)放入JSON中,作为简单的“数据库”。我的目录搜索很好,但是当我尝试保存数据库或将其编码为JSON时,它会引发“ TypeError:{…}不可序列化JSON”(…是字典中的一些键和值,更多有关以下内容) 问题 :程序按照以下格式构建大型词典对象
问题内容: 我使用Python Flask Restful API遇到问题,并且数据进入Elasticsearch,当我用Postman发布新数据时,问题是: TypeError:“ Response”类型的对象不可JSON序列化 你能帮助我吗? 模型: 视图: 错误: 编辑:我发现了问题。它在def post(self,people_id)方法中: 新队: 问题答案: 这可以简单地通过以下方式完
我试图从python向json文件发送一个简单的字典,但我一直收到“TypeError:1425不是json可序列化的”消息。 如果我添加默认参数,那么它会写入,但整数值会作为字符串写入json文件,这是不可取的。
问题内容: 当我尝试运行以下代码时: 我得到以下异常: 如何成功使用包含s的对象? 问题答案: 在序列化之前将集合变成列表,或使用自定义处理程序来这样做:
我使用的是 DJango 1.8 和蟒蛇 3.4 当运行下面的视图时,Django抛出类型错误-对象不可JSON序列化 Views.py 我试图从mysql数据库中读取几行数据并显示在html文件中,当上面的视图运行时,我看到下面的错误信息 在HTML页面中,我有一个下拉列表。根据选择的选项,我的Ajax将返回从mysql表获取的记录。 Models.py GreenStats和YellowSta
我有以下用于序列化查询集的代码: 下面是我的 我需要将其序列化。但它说无法序列化