2017-07-28 6 views
1

zu konvertieren, habe ich die SOAP-Antwort wie folgt. Ich möchte über die Soap-Nachricht iterieren und die Daten im listMetadataResponse-Tag im JSONArray-Format abrufen. Hier ist mein Beispiel für eine SOAP-Antwort ist:Um SOAP Antwort zu JSONArray

<?xml version="1.0" encoding="UTF-8"?> 
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://soap.sforce.com/2006/04/metadata"> 
     <soapenv:Body> 
      <listMetadataResponse> 
      <result> 
       <createdById>00528000001m5RRAAY</createdById> 
       <createdByName>Hariprasath Thanarajah</createdByName> 
       <createdDate>1970-01-01T00:00:00.000Z</createdDate> 
       <fileName>objects/EmailMessage.object</fileName> 
       <fullName>EmailMessage</fullName> 
       <id /> 
       <lastModifiedById>00528000001m5RRAAY</lastModifiedById> 
       <lastModifiedByName>Hariprasath Thanarajah</lastModifiedByName> 
       <lastModifiedDate>1970-01-01T00:00:00.000Z</lastModifiedDate> 
       <namespacePrefix /> 
       <type>CustomObject</type> 
      </result> 
       <result> 
       <createdById>00528000001m5RRAAY</createdById> 
       <createdByName>Hariprasath Thanarajah</createdByName> 
       <createdDate>1970-01-01T00:00:00.000Z</createdDate> 
       <fileName>objects/EmailMessage.object</fileName> 
       <fullName>EmailMessage</fullName> 
       <id /> 
       <lastModifiedById>00528000001m5RRAAY</lastModifiedById> 
       <lastModifiedByName>Hariprasath Thanarajah</lastModifiedByName> 
       <lastModifiedDate>1970-01-01T00:00:00.000Z</lastModifiedDate> 
       <namespacePrefix /> 
       <type>CustomObject</type> 
      </result> 
      </listMetadataResponse> 
     </soapenv:Body> 
    </soapenv:Envelope> 

ich in JSON.So alle Ergebnisknoten als JSONObject mit jedem Attributknoten und Werte als Schlüsselwertpaar erhalten möchten, in diesem Fall möchte ich das Ergebnis als ein JSONArray mit zwei Ergebnissen JSONObject darin.

Ich habe diesen Code ausprobiert. Ich bekomme Knotennamen, aber ich bekomme die Knotenwerte nicht.

private static Document loadXMLString(String response) throws Exception { 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = dbf.newDocumentBuilder(); 
    InputSource is = new InputSource(new StringReader(response)); 

    return db.parse(is); 
} 

public static JSONArray getFullData(String tagName, String request) throws Exception { 
    JSONArray resultArray = new JSONArray(); 
    Document xmlDoc = loadXMLString(request); 
    NodeList nodeList = xmlDoc.getElementsByTagName("*"); 
    for (int i = 0; i < nodeList.getLength(); i++) { 
     Node node = nodeList.item(i); 
     if (node.getNodeType() == Node.ELEMENT_NODE) { 
      if (node.getNodeName().equals("result")) { 
       JSONObject rootObject = new JSONObject(); 
       NodeList childNodeList = nodeList.item(i).getChildNodes(); 
       for (int j = 0; j < childNodeList.getLength(); j++) { 
        node = childNodeList.item(i); 
        rootObject.put(node.getNodeName(), node.getNodeValue()); 
       } 
       resultArray.put(rootObject); 
      } 
     } 
    } 
} 

Antwort

2

Sie können JSON-Java-Bibliothek von stleary verwenden.

Sie können den folgenden Code verwenden, um eine XML-Zeichenfolge in JSONObject zu konvertieren.

JSONObject data = XML.toJSONObject(xmlString);

Sie weitere Informationen darüber finden Sie hier: JSON-java

+0

Gibt es eine Weise, die ich alle Werte in Fällen als String machen können, wo sie ganze Zahlen sind ?, @Chinmay Jain –

+0

Iterate über das Objekt JSONObject Keyset verwenden, und verwenden Sie dann 'Integer.toString (int)' –

+0

Ich dachte darüber nach, aber das scheint eine ganze Menge für mich zu sein, weil meine Daten wirklich riesig sind. Danke trotzdem, ich denke, ich müsste es mit Loops versuchen. –

0

Mit der obigen Referenz, ich bin in der Lage, die Lösung bei least.I umzusetzen hoffen, dass dies auch für andere arbeiten.

private static JSONObject extractData(NodeList nodeList, String tagName) throws TransformerConfigurationException, 
     TransformerException, TransformerFactoryConfigurationError, JSONException { 
    JSONObject resultObject = new JSONObject(); 
    for (int i = 0; i < nodeList.getLength(); i++) { 
     Node node = nodeList.item(i); 
     if (!node.getNodeName().equals(tagName) && node.hasChildNodes()) { 
      return extractData(node.getChildNodes(), tagName); 
     } else if (node.getNodeName().equals(tagName)) { 
      DOMSource source = new DOMSource(node); 
      StringWriter stringResult = new StringWriter(); 
      TransformerFactory.newInstance().newTransformer().transform(source, new StreamResult(stringResult)); 
      resultObject = XML.toJSONObject(stringResult.toString()).optJSONObject(tagName); 
     } 
    } 
    return resultObject; 
} 

public static JSONObject getFullData(String tagName, SOAPMessage message) throws Exception { 
    NodeList nodeList = message.getSOAPBody().getChildNodes(); 
    JSONObject resultObject = extractData(nodeList, tagName); 
    return resultObject; 
}