【问题标题】:SOAPpy result to JSONSOAPpy 结果转 JSON
【发布时间】:2014-01-30 01:03:26
【问题描述】:

我正在向外部 WDSL 服务发送请求,由于某种原因,该服务返回了一个巨大的对象。我正在使用SOAPpy 进行连接,我想将结果解析为 JSON。但是我在对象中得到了很多对象,就像这样。

<SOAPpy.Types.structType incident at 53129728>: 

有什么方法可以用 SOAPpy 解析这个对象吗?我是第一次使用这个 SOAPpy。

【问题讨论】:

    标签: python soappy


    【解决方案1】:

    如果您使用的是 SOAPpy - 有一种方法可以将 SOAPpy 对象转换为本机 Python 对象 - 然后将其放入 json.dumps 中而不会出错。

    soappyobject = SOAPProxy.someMethod()
    pythonobject = SOAPProxy.Types.simplify(soapyobject)
    jsonobject = json.dumps(pythonobject)
    

    ...至少 - 到目前为止,它对我放入的每个对象都有效。

    不幸的是,它不适用于 SOAPpy.WSDL 可以返回的 WSDL 对象。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,我在这里找到了解决方案:

      https://github.com/paultag/deapi/blob/master/deapi/emitters.py

      基本上你已经创建了一个 Encoder json 类并给转储类进行编码。

      类似这样的:

      class DateEncoder(json.JSONEncoder):
      
      def default(self, obj):
          if isinstance(obj, date):
              return str(obj)
          if isinstance(obj, structType):
              obj = obj._asdict()
              return obj
          return json.JSONEncoder.default(self, obj)
      

      还有他们:

      response = json.dumps(response,sort_keys=True, indent=4, cls=DateEncoder)
      

      【讨论】:

        【解决方案3】:

        这对我有用:

        pythonObject = SOAPpy.Types.simplify(soapObject)

        jsonObject = json.dumps(pythonObject)

        【讨论】: