2017-08-01 99 views
0

我有一个包含大量数据的xml文件。我已解析的XML文件,并试图将值添加到JSON对象,但只有最后一个值越来越added.Please找到我的代码如下:只有最后一个值被添加到JSON对象

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

public class Process_Parser { 

static JSONObject json= new JSONObject(); 
//static //JSONObject arrayvalue=new JSONArray(); 

public static void main(String args[]) { 
try { 

File process = new File("/Users/instrument.xml"); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(process); 
doc.getDocumentElement().normalize(); 

//System.out.println("root of xml file" + doc.getDocumentElement().getNodeName()); 
NodeList nodes = doc.getElementsByTagName("process"); 
//System.out.println("=========================="); 

Element pageElement = (Element)doc.getElementsByTagName("process").item(0); 
//NodeList result = pageElement.getElementsByTagName("processName"); 
System.out.println("Suba-----------"+nodes.getLength()); 

for (int i = 0; i < nodes.getLength(); i++) { 
Node node = nodes.item(i); 

if (node.getNodeType() == Node.ELEMENT_NODE) { 
Element element = (Element) node; 
//System.out.println(getValue("processName", element).contains("carkitd")); 
//if(element.getElementsByTagName("process") != null){ 
if(element.getFirstChild().getNodeValue() != null){ 
    if(getValue("processName", element).contains("carkitd")){ 


     json.put("processName",getValue("processName", element)); 
     json.put("cpuUsage",getValue("cpuUsage", element)); 
     json.put("realmemory",getValue("realmemory", element)); 
     json.put("Virtualmemory",getValue("Virtualmemory", element)); 
     json.put("thread",getValue("thread", element)); 
     json.put("cputime",getValue("cputime", element)); 

} 
} 

} 
} 
//System.out.println("result-array:" +arrayvalue); 
System.out.println("result" +json); 
//} 
//System.out.println("arrayvalue::"+arrayvalue.size()); 
}catch (Exception ex) { 
ex.printStackTrace(); 
} 
} 


private static String getValue(String tag, Element element) { 
NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes(); 
Node node = (Node) nodes.item(0); 
return node.getNodeValue(); 
} 

} 

当我运行上面的代码,我得到下面的结果

实际结果:

{ 

"Virtualmemory":"1100320.000000", 
"cpuUsage":"0.000000", 
"process":"carkitd", 
"realmemory":"1044.000000", 
"thread":"2.000000", 
"cputime":"0.000000" 
} 

预期结果:

它应该有67个物体

示例XML文件:

<instrument> 
    <slice time ='1498215480919'> 
     <process> 
      <processId>1.000000</processId> 
      <processName>launchd</processName> 
      <cpuUsage>0.203195</cpuUsage> 
      <realmemory>5084.000000</realmemory> 
      <Virtualmemory>1080112.000000</Virtualmemory> 
      <thread>7.000000</thread> 
      <cputime>0.000000</cputime> 
     </process> 
     <process> 
      <processId>24.000000</processId> 
      <processName>carkitd</processName> 
      <cpuUsage>0.002845</cpuUsage> 
      <realmemory>576.000000</realmemory> 
      <Virtualmemory>1074752.000000</Virtualmemory> 
      <thread>6.000000</thread> 
      <cputime>0.000000</cputime> 
     </process> 
     <process> 
      <processId>24.000000</processId> 
      <processName>carkitd</processName> 
      <cpuUsage>0.002845</cpuUsage> 
      <realmemory>576.000000</realmemory> 
      <Virtualmemory>1074752.000000</Virtualmemory> 
      <thread>6.000000</thread> 
      <cputime>0.000000</cputime> 
     </process> 
    </slice> 
    </instrument> 

我失去了一些东西?

+0

通过在for循环中创建对象并在对象填充后将对象添加到数组中,使用'JSONObject'的'JSONArray' –

回答

0

创建JSONArray,并保持你插入的JSONObject循环内。

JSONArray finalArray = new JSONArray(); // create your jsonarray 
for (int i = 0; i < nodes.getLength(); i++) { 
    Node node = nodes.item(i); 

    if (node.getNodeType() == Node.ELEMENT_NODE) { 
     Element element = (Element) node; 
     //System.out.println(getValue("processName", element).contains("carkitd")); 
     //if(element.getElementsByTagName("process") != null){ 
     if (element.getFirstChild().getNodeValue() != null) { 
      if (getValue("processName", element).contains("carkitd")) { 
       JSONObject json = new JSONObject(); // your temp obj 

       json.put("processName", getValue("processName", element)); 
       json.put("cpuUsage", getValue("cpuUsage", element)); 
       json.put("realmemory", getValue("realmemory", element)); 
       json.put("Virtualmemory", getValue("Virtualmemory", element)); 
       json.put("thread", getValue("thread", element)); 
       json.put("cputime", getValue("cputime", element)); 
       finalArray.put(json); // push your values in the array 
      } 
     } 

    } 
} 
//System.out.println("result-array:" +arrayvalue); 
System.out.println("result " + finalArray); 
0

你写了:

json.put("processName",getValue("processName", element)); 
json.put("cpuUsage",getValue("cpuUsage", element)); 
json.put("realmemory",getValue("realmemory", element)); 
json.put("Virtualmemory",getValue("Virtualmemory", element)); 
json.put("thread",getValue("thread", element)); 
json.put("cputime",getValue("cputime", element)); 

物权法tlike一个Map,这个覆盖值,如果它已经存在。在每一次迭代中,您只需重写您的JSON对象。

您应该在每次迭代中创建一个新的JSONObject并将其存储在JSONArray中。

0

您可以参考我的问题here以便于实施。

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

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

JSONObject data = XML.toJSONObject(xmlString);

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

通过以上参考,我能够实现在least.I解决方案希望这会为他人正常工作。

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

对于你的情况只是初始化JSON内环路

json = new JSONObject(); 
相关问题