文件操作 -- Xml转化成Json的三种方式

Xml转化成json的三种方式:

方法一: 使用json-lib框架, 需要的依赖包比较多

1 、这里通过Class的getResourceAsStream方法获得指定文件的输入流,这里指定参数没有带/,表示Test类与xml文件在同一级目录下,如果有/那么是从根目录进行获取的,
2 、之后利用IOUtils的toString方法将该输入流转化为xml格式的字符串输出,调用XMLSerializer的read方法接受xml格式的字符串,将其转化为JSON对象
3、 这里实际上输出json对象和调用json对象的toString方法输出的形式在控制台展示的是一样的

package com.XmlToJson;

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.io.IOUtils;

import net.sf.json.JSON;
import net.sf.json.xml.XMLSerializer;

public class XmlToJson1{
    public static void ConvertXMLtoJSON()  {

        InputStream is = XmlToJson1.class.getResourceAsStream("student.xml");

        String xml;

        try {

            xml = IOUtils.toString(is);

            System.out.println(xml);

            XMLSerializer xmlSerializer = new XMLSerializer();

            JSON json = xmlSerializer.read(xml);

            System.out.println(json);

            System.out.println(json.toString(0));

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

  public static void main(String[] args) {

    XmlToJson1.ConvertXMLtoJSON();

}

}

输出格式:

{"@age":"too young","@experience":"too simple","@result":"sometimes naive"}

 

方法二:使用 org.json、 commons-io框架

需要导入包

<dependency>

<groupId>org.json</groupId>

<artifactId>json</artifactId>

<version>20160810</version>

</dependency>

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>2.5</version>

</dependency>

package com.XmlToJson;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.XML;

public class JsonUtils {
    public static String XmlToJson2(String filepath) throws IOException {
        FileInputStream in = new FileInputStream(filepath);
        String xml = IOUtils.toString(in, "utf-8");
        JSONObject object = XML.toJSONObject(xml);
        return object.toString();
    }

    public static void main(String[] args) throws JSONException, IOException {
        String path = System.getProperty("user.dir") + File.separator + "src" + File.separator + "com" + File.separator
                + "XmlToJson" + File.separator + "student.xml";
        String jsonpath = System.getProperty("user.dir") + File.separator + "src" + File.separator + "com"
                + File.separator + "XmlToJson" + File.separator + "test2.json";
        System.out.println(path);
        String json = XmlToJson2(path);
        FileUtils.writeStringToFile(new File(jsonpath), json, "utf-8");
    }
}

 

 


输出格式:

{"person":{"result":"sometimes naive","experience":"too simple","age":"too young"}}

 

方法三: 使用 jdom、 fastjson 框架

package com.XmlToJson;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.json.JSONObject;

public class XmlToJson3 {
    public static void main(String[] args) throws IOException {
        //String path = System.getProperty("user.dir") + File.separator + "testdata" + File.separator + "pushClaim.xml";
        //String jsonpath = System.getProperty("user.dir") + File.separator + "testdata" + File.separator + "test3.json";
        String path = System.getProperty("user.dir") + File.separator + "src" + File.separator + "com" + File.separator
                + "XmlToJson" + File.separator + "student.xml";
        String jsonpath = System.getProperty("user.dir") + File.separator + "src" + File.separator + "com"
                + File.separator + "XmlToJson" + File.separator + "test3.json";
        String json = XmlToJson(new File(path));
        System.out.println(json);
        FileUtils.writeStringToFile(new File(jsonpath), json, "utf-8");
    }

    public static String XmlToJson(File file) {
        JSONObject object = new JSONObject();
        SAXBuilder builder = null;
        try {
            builder = new SAXBuilder();

            Document document = builder.build(file);
            Element element = document.getRootElement();
            object.put(element.getName(), IterateElement(element));
            return object.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    private static Map IterateElement(Element element) {
        List node = element.getChildren();
        List list = null;
        Map map = new HashMap();
        for (int i = 0; i < node.size(); i++) {
            list = new LinkedList();
            Element element1 = (Element) node.get(i);
            if (element1.getTextTrim().equals("")) {
                if (element1.getChildren().size() == 0) {
                    continue;
                }
                if (map.containsKey(element1.getName())) {
                    list = (List) map.get(element1.getName());
                }
                list.add(IterateElement(element1));
                map.put(element1.getName(), list);
            } else {
                if (map.containsKey(element1.getName())) {
                    list = (List) map.get(element1.getName());
                }
                list.add(element1.getTextTrim());
                map.put(element1.getName(), list);
            }
        }
        return map;
    }
}

 

 



 

 


 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值