簡體   English   中英

Python:將suds對象序列化為JSON

[英]Python: Serialize suds object to JSON

我正在使用suds調用SOAP API,它將數據作為對象而不是原始XML返回。 我想保存原始響應的副本以及我解析的內容,最終目標是存儲為JSON(我目前正在使用TinyDB進行測試)。

整體流程如下:

  1. 檢索原始響應
  2. 使用下面的腳本創建原始響應的dict
  3. 解析響應對象供以后使用
  4. 將所有內容序列化為JSON並存儲在TinyDB中

我將suds對象轉換為dict的腳本是:

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

這個錯誤讓我失望,因為:

  1. 我知道這個對象Date出現在序列化期間不會拋出錯誤的其他記錄中
  2. type(Date.Day)是一個int,字段名是一個字符串

有沒有人知道這里發生了什么? 它看起來好像正在嘗試序列化原始對象,但我插入到TinyDB中的所有內容都已經通過makeDict運行

我想我會回答我自己的問題而不是刪除它以防其他人遇到這個問題。

suds對象有時包含一個列表,該列表又包含其他suds對象。 makeDict()函數不一定達到最深層次的嵌套,因此它有時會返回一個包含suds對象的dict,該對象無法序列化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM