将 SOAP 响应转换为 JSONArray



我有如下 SOAP 响应。我想遍历 soap 消息,并希望获取 JSONArray 格式的 listMetadataResponse 标签中的数据。下面是我的示例 SOAP 响应:

<?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>

我想将每个结果节点作为 JSONObject 获取,每个属性节点和值作为 JSON.So 中的键值对,在这种情况下,我希望结果作为 JSONArray 其中包含两个结果 JSONObject。

我试过这段代码。我正在获取节点名称,但没有获得节点值。

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);
}
}
}
}

你可以通过 stleary 使用 JSON-java 库。

可以使用以下代码将 XML 字符串转换为 JSONObject。

JSONObject data = XML.toJSONObject(xmlString);

你可以在这里找到更多关于它的信息:JSON-java

通过上述参考,我至少能够实现该解决方案。我希望这也适用于其他人。

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;
}

最新更新