最近需求中需要对xml进行json转换,查了部分资料,这里使用了dom4j进行json转换,json使用的是阿里的fastJson。
1、添加依赖
<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.79</version>
</dependency>
2、转换代码
public class Dom4j2Json {
public static void main(String[] args) throws DocumentException {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("F:\\JavaProject\\MyPlugin\\src\\main\\resources\\logback-spring.xml"));
JSONObject jsonObject = dom4j2Json(document.getRootElement());
String pretty = JSON.toJSONString(jsonObject, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue
, SerializerFeature.WriteDateUseDateFormat);
System.out.println(pretty);
}
/**
* ml转json
* @param element
* @return
*/
private static JSONObject dom4j2Json(Element element){
JSONObject supJson = new JSONObject();
JSONObject json = new JSONObject();
dom4j2Json(element, json);
supJson.put(element.getName(), json);
return supJson;
}
/**
* 内层转json
*
* @param element
* @param json
*/
private static void dom4j2Json(Element element, JSONObject json) {
//如果是属性
for (Object o : element.attributes()) {
Attribute attr = (Attribute)o;
if (!isEmpty(attr.getValue())) {
json.put("@" + attr.getName(), attr.getValue());
}
}
List<Element> chdEl = element.elements();
if (chdEl.isEmpty() && !isEmpty(element.getText())) {
//如果没有子元素,只有一个值
json.put(element.getName(), element.getText());
}
//有子元素
for (Element e : chdEl) {
//子元素也有子元素
if (!e.elements().isEmpty()) {
JSONObject chdjson = new JSONObject();
dom4j2Json(e, chdjson);
Object o = json.get(e.getName());
if (o != null) {
JSONArray jsona = null;
//如果此元素已存在,则转为jsonArray
if (o instanceof JSONObject) {
JSONObject jsono = (JSONObject)o;
json.remove(e.getName());
jsona = new JSONArray();
jsona.add(jsono);
jsona.add(chdjson);
}
if (o instanceof JSONArray) {
jsona = (JSONArray)o;
jsona.add(chdjson);
}
json.put(e.getName(), jsona);
} else {
if (!chdjson.isEmpty()) {
json.put(e.getName(), chdjson);
}
}
} else {//子元素没有子元素
for (Object o : element.attributes()) {
Attribute attr = (Attribute)o;
if (!isEmpty(attr.getValue())) {
json.put("@" + attr.getName(), attr.getValue());
}
}
if (!e.getText().isEmpty()) {
json.put(e.getName(), e.getText());
}
//这里是最后一层且有属性
if (e.getText().isEmpty() && !e.attributes().isEmpty()) {
Object oe = json.get(e.getName());
if (oe == null) {
JSONObject jsonObject = new JSONObject();
for (Object o : e.attributes()) {
Attribute attr = (Attribute)o;
if (!isEmpty(attr.getValue())) {
jsonObject.put("@" + attr.getName(), attr.getValue());
}
}
json.put(e.getName(), jsonObject);
} else {
JSONArray jsonArray = new JSONArray();
if (oe instanceof JSONObject) {
JSONObject oeJsonObject = (JSONObject)oe;
jsonArray.add(oeJsonObject);
}
if (oe instanceof JSONArray) {
jsonArray = (JSONArray)oe;
}
JSONObject jsonObject = new JSONObject();
for (Object o : e.attributes()) {
Attribute attr = (Attribute)o;
if (!isEmpty(attr.getValue())) {
jsonObject.put("@" + attr.getName(), attr.getValue());
}
}
jsonArray.add(jsonObject);
json.put(e.getName(), jsonArray);
}
}
}
}
}
private static boolean isEmpty(String value) {
return value == null || value.length() == 0 || "null".equals(value);
}
}
网友评论