Jam*_*ull 6 python soap dictionary suds
我有一些来自SOAP
API的数据Suds
,我需要在Python
脚本中解析它.在我离开并编写解析器之前(不仅仅是这个要做):
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"
},
}
Run Code Online (Sandbox Code Playgroud)
aay*_*rva 13
在类中调用dict
了一个类方法,suds.client.Client
它接受一个sudsobject
输入并返回一个Python dict
作为输出.在这里查看:官方Suds文档
生成的代码段变得如此优雅:
from suds.client import Client
# Code to obtain your suds_object here...
required_dict = Client.dict(suds_object)
Run Code Online (Sandbox Code Playgroud)
您可能还想检查同一类中的items
类方法(链接),该类从suds_object中提取类似于items
方法的项目dict
.
您可以将对象强制转换为dict()
,但仍然可以获得suds使用的复杂数据类型.所以这里是我为这个场合写的一些有用的函数:
def basic_sobject_to_dict(obj):
"""Converts suds object to dict very quickly.
Does not serialize date time or normalize key case.
:param obj: suds object
:return: dict object
"""
if not hasattr(obj, '__keylist__'):
return obj
data = {}
fields = obj.__keylist__
for field in fields:
val = getattr(obj, field)
if isinstance(val, list):
data[field] = []
for item in val:
data[field].append(basic_sobject_to_dict(item))
else:
data[field] = basic_sobject_to_dict(val)
return data
def sobject_to_dict(obj, key_to_lower=False, json_serialize=False):
"""
Converts a suds object to a dict.
:param json_serialize: If set, changes date and time types to iso string.
:param key_to_lower: If set, changes index key name to lower case.
:param obj: suds object
:return: dict object
"""
import datetime
if not hasattr(obj, '__keylist__'):
if json_serialize and isinstance(obj, (datetime.datetime, datetime.time, datetime.date)):
return obj.isoformat()
else:
return obj
data = {}
fields = obj.__keylist__
for field in fields:
val = getattr(obj, field)
if key_to_lower:
field = field.lower()
if isinstance(val, list):
data[field] = []
for item in val:
data[field].append(sobject_to_dict(item, json_serialize=json_serialize))
else:
data[field] = sobject_to_dict(val, json_serialize=json_serialize)
return data
def sobject_to_json(obj, key_to_lower=False):
"""
Converts a suds object to json.
:param obj: suds object
:param key_to_lower: If set, changes index key name to lower case.
:return: json object
"""
import json
data = sobject_to_dict(obj, key_to_lower=key_to_lower, json_serialize=True)
return json.dumps(data)
Run Code Online (Sandbox Code Playgroud)
如果有更简单的方法,我很乐意听到它.
归档时间: |
|
查看次数: |
12402 次 |
最近记录: |