XML和JSON


主要介绍xml和json的框架,json的使用方法。
java中xml用的不多,除了配置文件,语法格式不难。不做详细介绍。
关于SAXReader类读取,自动生成及其工具类XStream使用方法,在github有源码,配有注释和笔记,文末自取。 1
补充:使用需要对应的jar包,可以自己在github下载,或者在我的github中根目录下的lib拿到。

先看脑图吧:
ximind_xml&json

xml

下面所有代码外面加main函数即可运行!POJO代码不贴出! 所有涉及路径的代码,请修改成你自己的

解析本地xml

 		//  1. 获取输入流
        FileInputStream fis = new FileInputStream("src/com/hllg/chap4/xmlAndJson/person.xml");
        //  2. 创建xml读取对象
        SAXReader sr = new SAXReader();
        //  3. 读取并得到文档对象
        Document doc = sr.read(fis);
        //  4. 通过文档获取跟元素
        Element root = doc.getRootElement();
        //  5.开始解析元素,读取元素名称
        System.out.println(root.getName());
        //只能获取到第一个匹配的
        Element person = root.element("person");
        Element name = person.element("name");
        System.out.println(name.getText());
        System.out.println("-----------------------");
        //获取所有根下的元素
        List<Element> es = root.elements();
        for (int i = 0; i < es.size(); i++) {
            //遍历根下所有的子元素
            Element persons = es.get(i);
            //person节点id属性的值
            System.out.println(persons.attributeValue("id"));
            //person节点name元素的值
            System.out.println(persons.elementText("name"));
            System.out.println(persons.elementText("sex"));
            System.out.println(persons.elementText("info"));
            System.out.println("-----------------------");

解析网络xml

运行前注意:自己随便填个正确的手机号,我自己的删了,下面有手机号的都一样!

		//自己随便填个手机号,我自己的删了,下面都一样
		String phone = "";
        URL url = new URL("http://apis.juhe.cn/mobile/get?phone=" + phone + "&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
        URLConnection conn = url.openConnection();
        InputStream is = conn.getInputStream();
        SAXReader sr = new SAXReader();
        Document doc = sr.read(is);
        Element root = doc.getRootElement();
        String resultCode = root.elementText("resultcode");
        //System.out.println(resultCode);
        if ("200".equals(resultCode)) {
            Element result = root.element("result");
            String province = result.elementText("province");
            String city = result.elementText("city");
            String zip = result.elementText("zip");
            String areaCode = result.elementText("areacode");
            String company = result.elementText("company");
            if (province.equals(city)) {
                System.out.println("你所在的城市是:" + city + ",邮编是:" + zip + ",区号是:" + areaCode + ",所属运营公司:" + company);
            } else {
                System.out.println("你所在的省份是:" + province + ",城市是:" + city + ",邮编是:" + zip + ",区号是:" + areaCode + ",所属运营公司:" + company);
            }
        } else {
            System.out.println("手机号输入有误");
        }

XPath解析

		String phone = "";
        URL url = new URL("http://apis.juhe.cn/mobile/get?phone=" + phone + "&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
        URLConnection conn = url.openConnection();
        InputStream is = conn.getInputStream();
        SAXReader sr = new SAXReader();
        Document doc = sr.read(is);
        //只有单个节点,如果有多个,返回第一个;
        //解析效率和Element没区别,就是写起来方便,内部封装了代码
        //Node是Element和Document的父接口
        Node node = doc.selectSingleNode("//company");
        System.out.println("运营商是:" + node.getText());

生成xml

里面字符串和命名我自己写着玩的,你们看着改。

		//  1. 通过文档帮助器创建一个空白文档
        Document doc = DocumentHelper.createDocument();
        //  2. 给文档添加第一个节点(根节点)
        Element wives = doc.addElement("wives");
        //  3. 通过根节点,丰富文档内容
        for (int i = 0; i < 100; i++) {
            Element wife = wives.addElement("wife");
            Element name = wife.addElement("name");
            name.setText("xx" + i + "号");
            Element say = wife.addElement("say");
            say.setText("喜欢你" + i + "次");
            //加""是为了转换成字符串;追加属性
            wife.addAttribute("id", 100 + i + "");
        }
        //  4. 创建一个文件输出输出流
        FileOutputStream fos = new FileOutputStream("src/com/hllg/chap4/xmlAndJson/hl.xml");
        //  5. 将文件输出流转换成XML输出流
        XMLWriter xw = new XMLWriter(fos);
        //  6. 写出文档
        xw.write(doc);
        //  7 . 释放资源
        xw.close();
        System.out.println("执行完毕");

通过XStream自动生成xml

 		Person hl = new Person("hl", 18, "喜欢你");
        //XStream的使用
        //  1. 创建XStream的对象
            XStream x = new XStream();
        //  2. 修改某个类型生成的节点名称(可选设置;默认是包名.类名)
        x.alias("hl",Person.class);
        //  3. 传入对象开始生成
        String xml = x.toXML(hl);
        System.out.println(xml);

json

重点介绍json的两个工具类:一个是谷歌的Gson,还有一个阿里的FastJson,解析时用到。
首先:

Gson

以下字符串指json格式数据

 对象转字符串:

		//新建对象,只使用一次,用匿名对象
  		Gson g = new Gson();
  		Person p = new Person("hl", 18, '女');
		//转换
  		String person = g.toJson(p);

 字符串转对象:

		Gson g = new Gson();
		//转换,注意两个参数,
		Person p = g.fromJson("{\"name\":\"hl\",\"age\":18,\"sex\":\"女\"}", Person.class);
		System.out.println(p.getName());

键值对的值包含数组:

        Gson g = new Gson();
        //转换{"name":"hl","age":18,"sex":"女","w":["hl1","hl2","hl3"]}
        HashMap data = g.fromJson("{\"name\":\"hl\",\"age\":18,\"sex\":\"女\",\"w\":[\"hl1\",\"hl2\",\"hl3\"]}", HashMap.class);
        System.out.println(data.get("w"));
        //ArrayList,对象里面有数据,他就会转换成ArrayList(List)
        System.out.println(data.get("w").getClass());
        List list = (List) data.get("w");
        System.out.println(list.get(1));

FastJson

对象转换成字符串:

		Person p = new Person("cc",24,'女');
        String person = JSON.toJSONString(p);

字符串转对象:

        //  1. 转换 {"age":24,"name":"cc","sex":"女"}
        Person c = JSON.parseObject("{\"age\":24,\"name\":\"cc\",\"sex\":\"女\"}", Person.class);
        System.out.println(c.getName());

字符串转数组:

        //  1. 转换 ["hl","cc","hh"]
        List<String> strings = JSON.parseArray("[\"hl\",\"cc\",\"hh\"]", String.class);
        System.out.println(strings.get(0));

就到这,下次见
sue
2021-2-9 20:47:30


修改github地址,文件夹修改名称了。
2021-2-11 16:07:14


补充jar包的说明,及其获取过程。
2021-2-11 16:19:59


  1. https://github.com/SueRichard/kaikeba/tree/main/src/com/hllg/javaBasic/xmlAndJson ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值