7

スクリプトで解析する必要があるSOAPAPIからのデータがいくつかあります。パーサーを作成する前に (やるべきことはこれだけではありません):SudsPython

1)これが何か分かる人いますか? Suds (ドキュメンテーション)によって返される標準の複合オブジェクト データ型です。それを見つけたはずです。

2)もしそうなら、それを Python 辞書に変換するために使用できる既存のライブラリはありますか? このオブジェクトを Python dict に解析するにはどうすればよいですか? Suds に辞書を渡すことはできるようですが、簡単に元に戻す方法がわかりません。

(ArrayOfBalance){
   Balance[] = 
      (Balance){
         Amount = 0.0
         Currency = "EUR"
      },
      (Balance){
         Amount = 0.0
         Currency = "USD"
      },
      (Balance){
         Amount = 0.0
         Currency = "GBP"
      },
 }
4

6 に答える 6

17

入力としてを取り、出力としてPython を返すdictin classと呼ばれるクラス メソッドがあります。ここで確認してください:公式のSudsドキュメントsuds.client.Clientsudsobjectdict

結果のスニペットは、次のようにエレガントになります。

from suds.client import Client

# Code to obtain your suds_object here...

required_dict = Client.dict(suds_object)

また、メソッド onと同様に suds_object からアイテムを抽出する同じクラスのitemsクラス メソッド (リンク)を確認することもできます。itemsdict

于 2016-10-10T21:11:42.763 に答える
4

よくあることですが、正しい答えはdocs にあります。(括弧) 内のビットは、他のオブジェクトまたは型を含むことができるオブジェクトです。

この場合、型ArrayOfBalanceのリストを含むオブジェクトがあり、それぞれがとBalanceの属性を持っています。AmountCurrency

これらはすべて.表記法を使用して参照できるため、次のワンライナーでうまくいきます。

balance = {item.Currency: item.Amount for item in response.Balance}  
于 2013-07-11T00:02:30.490 に答える
4

1 つの解決策が見つかりました:

from suds.sudsobject import asdict

def recursive_asdict(d):
    """Convert Suds object into serializable format."""
    out = {}
    for k, v in asdict(d).iteritems():
        if hasattr(v, '__keylist__'):
            out[k] = recursive_asdict(v)
        elif isinstance(v, list):
            out[k] = []
            for item in v:
                if hasattr(item, '__keylist__'):
                    out[k].append(recursive_asdict(item))
                else:
                    out[k].append(item)
        else:
            out[k] = v
    return out

def suds_to_json(data):
    return json.dumps(recursive_asdict(data))

サブがネストされた辞書とリストである場合、それは機能するはずです。

于 2015-05-06T01:54:50.113 に答える
3

私は同様の問題に遭遇していて、泡の応答を読まなければなりませんでした. Suds レスポンスは、オブジェクトで構成されるタプルとして返されます。len(response) は、suds レスポンス タプルに含まれるオブジェクトの数を示します。最初のオブジェクトにアクセスするには、 を与える必要がありますresponse[0]

IDLE では、入力>>>print response[0]後にピリオド「.」を入力すると シンボルをクリックすると、このレベルからアクセスできるさまざまなオブジェクトを示すポップアップが表示されます。

例: と入力した場合response[0]。ポップアップが表示され、Balance オブジェクトが表示されるため、コマンドは になりresponse[0].Balanceます。

同じアプローチに従って、後続のレベルにあるオブジェクトのリストを取得できます

于 2014-12-25T21:12:58.167 に答える