我正在使用suds调用SOAP API,它返回的数据是对象而不是原始XML。我想要保存原始响应的副本以及我解析的内容,最终目标是将其存储为JSON(我目前正在使用TinyDB进行测试)。
整个流程如下:
1. 检索原始响应 2. 使用以下脚本创建原始响应的字典 3. 解析响应对象以供以后使用 4. 将所有内容序列化为JSON并存储在TinyDB中
我用于将suds对象转换为字典的脚本如下:
整个流程如下:
1. 检索原始响应 2. 使用以下脚本创建原始响应的字典 3. 解析响应对象以供以后使用 4. 将所有内容序列化为JSON并存储在TinyDB中
我用于将suds对象转换为字典的脚本如下:
def makeDict(response):
out = {}
for k, v in asdict(response).iteritems():
if hasattr(v, '__keylist__'):
out[k] = makeDict(v)
elif isinstance(v, list):
out[k] = []
for item in v:
if hasattr(item, '__keylist__'):
out[k].append(makeDict(item))
else:
out[k].append(item)
else:
out[k] = v
return out
然而,有时当我运行makeDict(object)
并尝试序列化为JSON时,我会得到以下类型错误:
File "C:\Python27\Lib\json\encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: (Date){
Day = 7
Month = 8
Year = 2004
} is not JSON serializable
这个错误让我感到困扰,因为:
- 我知道这个对象
Date
出现在其他记录中,在序列化过程中没有出错 Date.Day
的类型是整型而字段名称是字符串
有人知道这里发生了什么吗?看起来好像在尝试序列化原始对象,但我将所有插入 TinyDB 中的内容都通过 makeDict
处理过了。