xml和json互转工具类

这篇具有很好参考价值的文章主要介绍了xml和json互转工具类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分享一个json与xml互转的工具类,非常好用

一、maven依赖

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

四、使用方式

json转xml 

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

xml和json互转工具类,java,spring,java,json,xml

xml转json:

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

xml和json互转工具类,java,spring,java,json,xml文章来源地址https://www.toymoban.com/news/detail-686643.html

到了这里,关于xml和json互转工具类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【工具】XML和JSON互相转换

    2024年02月12日
    浏览(43)
  • java xml转json

    java xml转json 技术博客 http://idea.coderyj.com/ 最近在对接海康摄像头不支持json 返回的数据是xml尝试了各种方法,所以来总结一下 1.得到xml数据 2.java 将xml转json 依赖包 上代码 ps new ByteArrayInputStream(xmlString.getBytes(\\\"UTF-8\\\")) 一定要先转换为 utf8 才可以不然会直接失败

    2024年02月10日
    浏览(36)
  • Java-json相关转换,JSONObject与实体类/map互转、List/List<map>和JSONArray互转、获取JSONObject中的key value、字符串String转换等

    博客背景是Java开发。json相关的转换、取值等在日常开发中经常使用,但有时候还是会忘记or遇到些奇奇怪怪的问题。以此记录,提醒自己~不定期更新~ 实体类和JSONObject互转 Map和JSONObject互转 String转JSONObject 实体类转JSON字符串时不过滤NULL空值 获取JSONObject中的key value List和

    2024年02月12日
    浏览(81)
  • Java 操作XML转JSON数据格式

    1、SAXReader加载XML文件,创建DOM文档对象 ①、调用SAXReader.read(File file)方法 阐述: 【注释意思】:从给定的文件参数中读取文档: 1、file–是要读取的文件。 2、返回:新创建的Document实例 3、抛出:DocumentException–如果在解析过程中发生错误 【执行步骤】: 1、使用new InputSo

    2024年02月06日
    浏览(43)
  • x-cmd pkg | dasel - JSON、YAML、TOML、XML、CSV 数据的查询和修改工具

    dasel,是数据(data)和 选择器(selector)的简写,该工具使用选择器查询和修改数据结构。 支持 JSON,YAML,TOML,XML 和 CSV 五种常用的数据格式作为输入和输出格式。 实现常用数据格式(JSON, YAML, TOML, XML, CSV)之间的转换。 单执行文件,不需要依赖第三方库。 启动速度更快,

    2024年01月23日
    浏览(62)
  • 用Python在XML和Excel表格之间实现互转

    XML是一种超文本标记语言和文件格式,具有可自定义标签,易于扩展,便于编辑,传输便捷等优点。XML已成为应用数据交换的常用方式。虽然XML格式易于传输和开发者操作,但对于普通用户来说,数据以xls或xlsx的形式呈现更易阅读和编辑。本篇文章将分享如何使用Python 在X

    2024年02月07日
    浏览(40)
  • JSON转换:实体类和JSONObject互转,List和JSONArray互转(fastjson版)

         //1.java对象转化成String      String s=JSONObject.toJSONString(javaObject.class);       //2. java对象转化成Object         Object str=JSONObject.toJSON(javaObject.class);       //3.String类型转json对象        JSONObject jsonObject= JSONObject.parseObject(str);       //4. String转Object         Obj

    2024年02月14日
    浏览(48)
  • Golang : Bson\Json互转

    代码 运行 代码: https://download.csdn.net/download/halo_hsuh/12288107

    2024年02月02日
    浏览(31)
  • JSON转换:实体类和JSONObject互转,List和JSONArray互转,map和JSONObject,JSONarray互转(fastjson版)

    1.实体类和JSONObject互转 2.List和JSONArray互转 3.Map和JSONObject互转(同1.) 4.ListMap和JSONArray互转(同2.) 5.取数据 6.JSONArray转String{} 7.数组转jsonarry 注: 由上示例可知任意数据类型均可通过JSON.toJSON(xxx)转换成对应的JSONObject或JSONArray

    2024年01月19日
    浏览(54)
  • (JAVA)hutool工具类-Date<——>String类型互转,加日期操作加一年、一月、一星期、一天、一分、一秒操作

    之前小编去搜索,把时间格式转为String类型,搜索好几篇文章都还用 【 new SimpleDateFormat () 】 去转换,现在小编用hutool里的DateUtil里的方法,简单方便一行代码搞定!! 结果如下:  效果图如下 附加如下时间加减操作:  这些都是格式,看哪种满足需求 英文格式转中文格式

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包