- <!-->json 和 xm 互转</!-->
- <dependency>
- <groupId>org.dom4j</groupId>
- <artifactId>dom4j</artifactId>
- <version>2.1.3</version>
- </dependency>
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>fastjson</artifactId>
- <version>1.2.83</version>
- </dependency>
- <dependency>
- <groupId>com.google.code.gson</groupId>
- <artifactId>gson</artifactId>
- </dependency>
- package com.test.main;
-
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.google.gson.JsonArray;
- import com.google.gson.JsonElement;
- import com.google.gson.JsonObject;
- import com.google.gson.JsonParser;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.DocumentHelper;
- import org.dom4j.Element;
-
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
-
- public class JsonXmlUtils {
-
- public static JSONObject toJson(String xml){
- JSONObject jsonObject = new JSONObject();
- Document document = null;
- try {
- document = DocumentHelper.parseText(xml);
- } catch (DocumentException e) {
- e.printStackTrace();
- }
- //获取根节点元素对象
- Element root = document.getRootElement();
- return xmlToJson(root,jsonObject);
- }
-
- public static JSONObject xmlToJson(Element node,JSONObject json){
- //获取子节点list
- List<Element> list = node.elements();
- //获取节点名字
- String name = node.getName();
- //最下面的一层
- if(list.isEmpty()){
- String nodeValue = node.getTextTrim();
- json.put(name, nodeValue);
- }else{
- //下级节点进行嵌套
- JSONObject js = new JSONObject();
- //判断json数据中是否存在相同的 key
- //存在相同的key需要使用数组存储
- if(json.containsKey(name)){
- JSONArray jsonArray = null;
- Object o = json.get(name);
- if(o instanceof JSONArray){
- jsonArray=(JSONArray) o;
- }else{
- jsonArray = new JSONArray();
- jsonArray.add(o);
- }
- json.put(name,jsonArray);
- jsonArray.add(js);
- }else {
- json.put(name,js);
- }
- //递归
- for (Element element : list) {
- xmlToJson(element,js);
- }
-
- }
- return json;
- }
-
- /**
- * 将json字符串转换成xml
- *
- * @param json
- * json字符串
- * @throws Exception
- */
- public static Element toXml(String json,Element root) {
- JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
- Element ee = jsonToXml(jsonObject, root, null);
- return ee.elements().get(0);
- }
-
- /**
- * 将json字符串转换成xml
- *
- * @param jsonElement
- * 待解析json对象元素
- * @param parentElement
- * 上一层xml的dom对象
- * @param name
- * 父节点
- */
- public static Element jsonToXml(JsonElement jsonElement, Element parentElement, String name) {
- if (jsonElement instanceof JsonArray) {
- //是json数据,需继续解析
- JsonArray sonJsonArray = (JsonArray)jsonElement;
- for (int i = 0; i < sonJsonArray.size(); i++) {
- JsonElement arrayElement = sonJsonArray.get(i);
- jsonToXml(arrayElement, parentElement, name);
- }
- }else if (jsonElement instanceof JsonObject) {
- //说明是一个json对象字符串,需要继续解析
- JsonObject sonJsonObject = (JsonObject) jsonElement;
- Element currentElement = null;
- if (name != null) {
- currentElement = parentElement.addElement(name);
- }
- Set<Map.Entry<String, JsonElement>> set = sonJsonObject.entrySet();
- for (Map.Entry<String, JsonElement> s : set) {
- jsonToXml(s.getValue(), currentElement != null ? currentElement : parentElement, s.getKey());
- }
- } else {
- //说明是一个键值对的key,可以作为节点插入了
- Element el = parentElement.addElement(name);
- el.addText(jsonElement.getAsString());
- }
- return parentElement;
- }
-
- }
这里为了更全面的演示,所以嵌套三层
第三层:
- public class PeopleBase {
- private People people;
-
- public PeopleBase(People people) {
- this.people = people;
- }
- }
第二层:
- @Data
- public class People {
- private String name;
- private Integer age;
- private List<PeopleOther> likes;
- }
第三层:
- @Data
- public class PeopleOther {
- private String like;
- }
- public static void main(String[] args) throws Exception {
- People people = new People();
- people.setName("张三");
- people.setAge(1);
- PeopleOther peopleOther1 = new PeopleOther();
- peopleOther1.setLike("冰淇淋");
- PeopleOther peopleOther2 = new PeopleOther();
- peopleOther2.setLike("巧克力");
- List<PeopleOther> likes = new ArrayList<>();
- likes.add(peopleOther1);
- likes.add(peopleOther2);
- people.setLikes(likes);
-
- // 将json转为xml
- Element root = new BaseElement("root");
- System.out.println(JsonXmlUtils.toXml(new Gson().toJson(new PeopleBase(people)), root).asXML());
- }

- public static void main(String[] args) throws Exception {
- String xmlStr = "<people><name>张三name><age>1age><likes><like>冰淇淋like>likes><likes><like>巧克力like>likes>people>";
- System.out.println(JsonXmlUtils.toJson(xmlStr));
- }
