XML和JSON的格式和解析

1.XML

这是一个xml的格式的示例:

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book id="1001">
        <name>book1</name>
        <info>这是第1本书的简介!</info>
    </book>
    <book id="1002">
        <name>book2</name>
        <info>这是第2本书的简介!</info>
    </book>
</books>

XML可以用于:

  1. 网络数据传输 ❌(现在基本上都是使用JSON)

    JSON解析性能比XML更高,而且数据量越大差距越明显,但XML可读性更强。XML重点用于编写配置文件。

  2. 数据存储❌(基本不用)

  3. 配置文件(XML主要用于配置文件)

    XML重点在于 掌握语法格式,解析XML了解即可。

解析XML的方式

  1. SAX解析,不必将文档全部加载到内存中,占用内存非常小,单向解析,需要程序员维护节点的父子关系。
  2. Dom解析:将整个文档加载到内存中,建立树模型,消耗资源大(缺点可忽略不计),方便操作数据和结构,通常都是使用dom解析。

下面是两个解析xml的示例:

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

/**
 * dom4j dom解析网络xml示例
 * 此api用来解析查询手机号码归属地
 * api:
 * http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253"
 * */
public class XmlTest {
    public static void main(String[] args) throws IOException, DocumentException {
        String phone = "18159895016";
        URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
        //打开此url,获取连接
        URLConnection urlConnection = url.openConnection();
        //获取连接的输入流
        InputStream is = urlConnection.getInputStream();
        SAXReader saxReader = new SAXReader();
        //将输入流转成doc
        Document doc = saxReader.read(is);
        //获取根节点
        Element root = doc.getRootElement();
        String resultcode = root.elementText("resultcode");
        if ("200".equals(resultcode)){
            Element result = root.element("result");
            String province = result.elementText("province");
            String city = result.elementText("city");
            String company = result.elementText("company");
            if (city.equals(province)){
                System.out.println("手机号码归属地是:"+city);
            }else {
                System.out.println("手机号码归属地是:"+province+" "+city);
            }
            System.out.println("手机号运营商是:"+company);

        }else {
            System.out.println("手机号有误!解析错误!");
        }
    }
}
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

/**
 * dom4j  XPATH解析网络xml
 * XPATH非常方便,尤其是当xml很大时
 *
 * 此api用来解析查询手机号码归属地
 * api:
 * http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253"
 * */
public class XpathTest {
    public static void main(String[] args) throws IOException, DocumentException {
        String phone = "18159895016";
        URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
        URLConnection urlConnection = url.openConnection();
        InputStream is = urlConnection.getInputStream();
        SAXReader saxReader = new SAXReader();
        Document doc = saxReader.read(is);
        //获取单节点company,作为演示这里只获取了运营商,其余信息没有获取
        Node node = doc.selectSingleNode("//company");
        System.out.println(node.getName()+":"+node.getText());
    }
}

此外还有Jdom和dom4j都是基于dom方式。

其中jdom方便java开发,性能不是很高,而且不够灵活(因为是面向类编写的)

dom4j用有更高的性能和更高的灵活性(因为是面向接口编写的),此外还可以通过XPATH的方式解析。

Dom4j是一个非常优秀的开源的java xml api,性能优异,功能强大,易于使用。

许多开源项目都使用Dom4j来读写xml,如Hibernate

2.JSON

JSON是一种轻量级数据交换格式。

JSON(JavaScript Object Notation,JS对象简谱)是一种独立于语言的数据存储格式,是欧洲提出来的JavaScript中的一种规范。

在解析上:解析json速度比解析xml快,

在存储数据上:json表示的数据占用空间更小,更利于传输。

json出现于1999,得益于以上一些优点,在2005左右逐渐取代xml的地位。

存储对象格式对比:

在这里插入图片描述

Json使用频率非常之高,后端开发经常使用Json。

Java没有内置的解析Json的类,解析Json最常用的是:

  1. Gson:谷歌的
  2. FastJson:阿里的
//Gson和fastJson的使用,如果json中的属性是数组类型,会被解析成List类型
public class JsonTest {
    public static void main(String[] args) {
        Person p = new Person("张三",20,"北京市大兴区");
/*        Gson g = new Gson();
        //将对象转成json
        String s = g.toJson(p);
        System.out.println("将对象转换成json是:");
        System.out.println(s);
        //将json转成对象
        Person p2 = g.fromJson(s, Person.class);
        System.out.println("将json转成对象是:");
        System.out.println(p2);*/
        
        //阿里的fastjson
        String s = JSON.toJSONString(p);
        System.out.println(s);
        Person p2 = JSON.parseObject(s,Person.class);
        System.out.println(p2);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XMLJSON是两种常用的数据传输格式XML是可扩展标记语言(Extensible Markup Language)的缩写,它使用标记来表示数据的结构和内容。XML解析通常包括解析器和DOM或SAX两种解析方式,其中DOM方式将整个XML文档加载到内存中,以树结构的形式表示,而SAX方式则是在解析过程中逐行读取XML文档并触发相应的事件。 JSONJavaScript对象表示法(JavaScript Object Notation)的缩写,它是一种轻量级的数据交换格式JSON使用简洁的键值对的形式来表示数据,并且易于阅读和编写。在解析JSON格式数据时,可以使用各种编程语言中提供的JSON库或框架,如Java中的Gson或FastJson。这些库可以将JSON字符串解析为对象或将对象转换为JSON字符串。 XMLJSON都有各自的优缺点。XML的优点是结构清晰,可扩展性强,适用于复杂的数据结构。但是XML的缺点是冗余性较高,数据量较大,解析速度相对较慢。JSON的优点是体积小,解析速度快,适合在网络传输中使用。然而,JSON的缺点是可读性较差,不支持注释。 在项目中,XMLJSON格式的数据解析常用于数据交换和传输。通过解析XMLJSON格式的数据,我们可以获取并处理其中的内容,从而实现对数据的操作和分析。具体使用哪种格式取决于项目需求和技术栈的选择。例如,如果项目需要与其他系统进行数据交互,可能会使用XML格式;如果项目使用的是前端框架或后端语言支持JSON格式,那么可能会选择使用JSON格式进行数据解析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [XMLJSON格式数据解析方法](https://blog.csdn.net/qq_35523015/article/details/81053662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [jsonxml格式数据的解析java代码+相关的jar包)](https://download.csdn.net/download/zdd1065493823/10335380)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [XMLJSON 解析教程](https://blog.csdn.net/weixin_44715733/article/details/114749650)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值