2013-01-22 55 views
0

我试图使用python将以下数据转换为JSON,例如import json。我原本以为我收到JSON数据,直到我回应并找到下面的内容。蟒蛇 - 试图将乱码字符串转换为JSON

不幸的是,我从SOAP服务收到下面的数据,所以无法控制我如何接收它。

无论如何,它看起来像下面有任何可以解析的结构吗?或者我将不得不逐行通过它并手动转换它?它看起来不像我以前见过的任何东西,即使某些变量名称看起来像是XML,或者最初是XML。

我只对stopData[]数组的值感兴趣,如果这简化了一些事情!

为了记录在案,我试着用JSON解析器解析它,如下所示,但它不承认它:

data = json.loads(rawData) 
    data['StopData'] 

I also tried:  
    data = json.loads(rawData) 

但既不工作。 下面是我与之合作的数据:

tmpData = requestoutput[1][0][0][0] 

这向我表明数据实际存储在多:

('schema', [(schema){ 
    _id = "NewDataSet" 
    element[] = 
     (element){ 
     _UseCurrentLocale = "true" 
     _IsDataSet = "true" 
     _MainDataTable = "StopData" 
     _name = "NewDataSet" 
     complexType[] = 
      (complexType){ 
       choice[] = 
        (choice){ 
        _maxOccurs = "unbounded" 
        _minOccurs = "0" 
        element[] = 
         (element){ 
          _name = "StopData" 
          complexType[] = 
           (complexType){ 
           sequence[] = 
            (sequence){ 
             element[] = 
              (element){ 
              _type = "xs:dateTime" 
              _name = "ServiceDelivery_ResponseTimestamp" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "ServiceDelivery_ProducerRef" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:boolean" 
              _name = "ServiceDelivery_Status" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:boolean" 
              _name = "ServiceDelivery_MoreData" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "StopMonitoringDelivery_Version" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:dateTime" 
              _name = "StopMonitoringDelivery_ResponseTimestamp" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "StopMonitoringDelivery_RequestMessageRef" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:dateTime" 
              _name = "MonitoredStopVisit_RecordedAtTime" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "MonitoredStopVisit_MonitoringRef" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "MonitoredVehicleJourney_LineRef" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "MonitoredVehicleJourney_DirectionRef" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "FramedVehicleJourneyRef_DataFrameRef" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "FramedVehicleJourneyRef_DatedVehicleJourneyRef" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "MonitoredVehicleJourney_PublishedLineName" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "MonitoredVehicleJourney_OperatorRef" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "MonitoredVehicleJourney_DestinationRef" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "MonitoredVehicleJourney_DestinationName" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:boolean" 
              _name = "MonitoredVehicleJourney_Monitored" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:boolean" 
              _name = "MonitoredVehicleJourney_InCongestion" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "MonitoredVehicleJourney_BlockRef" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "MonitoredVehicleJourney_VehicleRef" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:string" 
              _name = "MonitoredCall_VisitNumber" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:boolean" 
              _name = "MonitoredCall_VehicleAtStop" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:dateTime" 
              _name = "MonitoredCall_AimedArrivalTime" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:dateTime" 
              _name = "MonitoredCall_ExpectedArrivalTime" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:dateTime" 
              _name = "MonitoredCall_AimedDepartureTime" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:dateTime" 
              _name = "MonitoredCall_ExpectedDepartureTime" 
              _minOccurs = "0" 
              }, 
              (element){ 
              _type = "xs:dateTime" 
              _name = "Timestamp" 
              _minOccurs = "0" 
              }, 
            }, 
           }, 
         }, 
        }, 
      }, 
     }, 
}])('diffgram', [(diffgram){ 
    DocumentElement[] = 
     (DocumentElement){ 
     StopData[] = 
      (StopData){ 
       _id = "StopData1" 
       _rowOrder = "0" 
       ServiceDelivery_ResponseTimestamp[] = 
        "2013-01-21T20:57:40.33+00:00", 
       ServiceDelivery_ProducerRef[] = 
        "bac", 
       ServiceDelivery_Status[] = 
        "true", 
       ServiceDelivery_MoreData[] = 
        "false", 
       StopMonitoringDelivery_Version[] = 
        "1.0", 
       StopMonitoringDelivery_ResponseTimestamp[] = 
        "2013-01-21T20:57:40.333+00:00", 
       StopMonitoringDelivery_RequestMessageRef[] = 
        "0", 
       MonitoredStopVisit_RecordedAtTime[] = 
        "2013-01-21T20:57:40.333+00:00", 
       MonitoredStopVisit_MonitoringRef[] = 
        "02371", 
       MonitoredVehicleJourney_LineRef[] = 
        "27", 
       MonitoredVehicleJourney_DirectionRef[] = 
        "Inbound", 
       FramedVehicleJourneyRef_DataFrameRef[] = 
        "2013-01-21", 
       FramedVehicleJourneyRef_DatedVehicleJourneyRef[] = 
        "4215", 
       MonitoredVehicleJourney_PublishedLineName[] = 
        "77A", 
       MonitoredVehicleJourney_OperatorRef[] = 
        "bac", 
       MonitoredVehicleJourney_DestinationRef[] = 
        "00354", 
       MonitoredVehicleJourney_DestinationName[] = 
        "Ringsend Rd via Tymon Park", 
       MonitoredVehicleJourney_Monitored[] = 
        "true", 
       MonitoredVehicleJourney_InCongestion[] = 
        "false", 
       MonitoredVehicleJourney_BlockRef[] = 
        "027023A:34", 
       MonitoredVehicleJourney_VehicleRef[] = 
        "33521", 
       MonitoredCall_VisitNumber[] = 
        "39", 
       MonitoredCall_VehicleAtStop[] = 
        "false", 
       MonitoredCall_AimedArrivalTime[] = 
        "2013-01-21T21:21:00+00:00", 
       MonitoredCall_ExpectedArrivalTime[] = 
        "2013-01-21T21:20:12+00:00", 
       MonitoredCall_AimedDepartureTime[] = 
        "2013-01-21T21:21:00+00:00", 
       MonitoredCall_ExpectedDepartureTime[] = 
        "2013-01-21T21:20:12+00:00", 
       Timestamp[] = 
        "2013-01-21T20:57:40.627+00:00", 
      }, 
      (StopData){ 
       _id = "StopData2" 
       _rowOrder = "1" 
       ServiceDelivery_ResponseTimestamp[] = 
        "2013-01-21T20:57:40.33+00:00", 
       ServiceDelivery_ProducerRef[] = 
        "bac", 
       ServiceDelivery_Status[] = 
        "true", 
       ServiceDelivery_MoreData[] = 
        "false", 
       StopMonitoringDelivery_Version[] = 
        "1.0", 
       StopMonitoringDelivery_ResponseTimestamp[] = 
        "2013-01-21T20:57:40.333+00:00", 
       StopMonitoringDelivery_RequestMessageRef[] = 
        "0", 
       MonitoredStopVisit_RecordedAtTime[] = 
        "2013-01-21T20:57:40.333+00:00", 
       MonitoredStopVisit_MonitoringRef[] = 
        "02371", 
       MonitoredVehicleJourney_LineRef[] = 
        "27", 
       MonitoredVehicleJourney_DirectionRef[] = 
        "Inbound", 
       FramedVehicleJourneyRef_DataFrameRef[] = 
        "2013-01-21", 
       FramedVehicleJourneyRef_DatedVehicleJourneyRef[] = 
        "4061", 
       MonitoredVehicleJourney_PublishedLineName[] = 
        "77A", 
       MonitoredVehicleJourney_OperatorRef[] = 
        "bac", 
       MonitoredVehicleJourney_DestinationRef[] = 
        "00354", 
       MonitoredVehicleJourney_DestinationName[] = 
        "Ringsend Rd via Tymon Park", 
       MonitoredVehicleJourney_Monitored[] = 
        "true", 
       MonitoredVehicleJourney_InCongestion[] = 
        "false", 
       MonitoredVehicleJourney_BlockRef[] = 
        "027008:34", 
       MonitoredVehicleJourney_VehicleRef[] = 
        "33204", 
       MonitoredCall_VisitNumber[] = 
        "39", 
       MonitoredCall_VehicleAtStop[] = 
        "false", 
       MonitoredCall_AimedArrivalTime[] = 
        "2013-01-21T21:44:00+00:00", 
       MonitoredCall_ExpectedArrivalTime[] = 
        "2013-01-21T21:44:00+00:00", 
       MonitoredCall_AimedDepartureTime[] = 
        "2013-01-21T21:44:00+00:00", 
       MonitoredCall_ExpectedDepartureTime[] = 
        "2013-01-21T21:44:00+00:00", 
       Timestamp[] = 
        "2013-01-21T20:57:40.627+00:00", 
      }, 
     }, 
}]) 
+0

你说得对,这显然不是JSON,所以这次不相关......但总的来说,说“它不承认它”或“没有工作”都不是很有帮助;改为发布异常和追踪。 – abarnert

+1

SOAP服务应该在标题中提供您的内容类型。你能打印出来并告诉我们它说了什么吗?另外,你通常会通过一个参数来控制你得到的东西,这个参数说明了你想要什么类型(例如,有多少服务可以让你选择XML与JSON还是可显示的HTML)。此外,SOAP服务可能有一些文档(如果它是公开的)或某人可以询问它(如果它是内部的),所以即使它不是标准符号,也可以获得语言定义而不是猜测它,这将使解析器更容易编写。 – abarnert

+0

你试过json.loads(); ?阅读这个https://jsonweb.readthedocs.org/en/latest/decode.html –

回答

0

为了记录在案,我用这样的代码解决了这个问题维数组。当我把它放到python中时,它会创建一个数组(尽管当我输出它[数据=列表]时,它告诉我它不能连接一个字符串和一个列表)。

但无论如何,我现在可以使用数组访问单个数据元素。

干杯。