Java中使用org.json库将XML转JSON时如何在转换中移除元素属性
在XML转JSON过程中过滤指定元素/属性(org.json实现)
嘿,我懂你的痛点——转完JSON再删属性/元素确实有点冗余,要是能在转换过程中直接过滤掉不需要的内容就省心多了。针对你用的org.json库,咱们可以先对XML做预处理,再转JSON,完美实现你的需求。
核心思路
org.json.XML的默认转换会保留所有XML节点和属性,所以咱们先把XML字符串解析成DOM对象,手动移除不需要的属性/元素,再把处理后的DOM转回字符串,最后用XML.toJSONObject()完成转换。这样就相当于在“转换过程中”完成了过滤。
完整实现代码
import org.json.JSONObject; import org.json.XML; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.ByteArrayInputStream; public class Example { public static void main(String[] args) { try { String xmlString = "<users><user name=test1 age=20></user><type><direct num=3></direct></type><report sub=eng score=30></report></users>"; // 1. 把XML字符串解析成DOM Document对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new ByteArrayInputStream(xmlString.getBytes())); // 2. 移除不需要的属性:user的name属性 NodeList userNodes = doc.getElementsByTagName("user"); for (int i = 0; i < userNodes.getLength(); i++) { Element userElement = (Element) userNodes.item(i); userElement.removeAttribute("name"); } // 3. 移除不需要的属性:report的sub属性 NodeList reportNodes = doc.getElementsByTagName("report"); for (int i = 0; i < reportNodes.getLength(); i++) { Element reportElement = (Element) reportNodes.item(i); reportElement.removeAttribute("sub"); } // 4. 把处理后的DOM转回XML字符串,再转成JSON String processedXml = XML.toString(doc); JSONObject jsonObject = XML.toJSONObject(processedXml); // 输出带格式化的结果,更易读 System.out.println(jsonObject.toString(4)); } catch (Exception e) { e.printStackTrace(); } } }
代码说明
- DOM解析:用
DocumentBuilder把XML字符串转成可操作的DOM对象,这样就能精准定位要移除的节点/属性。 - 属性移除:通过
getElementsByTagName找到目标元素,调用removeAttribute()删除指定属性;如果需要移除整个元素,用element.getParentNode().removeChild(element)即可。 - 二次转换:处理后的DOM转成XML字符串,再用
XML.toJSONObject()生成最终的JSON,结果就是你想要的干净结构。
运行结果
{ "users": { "report": { "score": 30 }, "type": { "direct": { "num": 3 } }, "user": { "age": 20 } } }
如果需要处理更复杂的过滤规则(比如批量移除多个属性、按条件过滤元素),可以把过滤逻辑封装成单独的方法,让代码更整洁。
内容的提问来源于stack exchange,提问作者my_doubt
相关产品推荐
相关产品推荐

