XML和JSON

XML

XML(EXtensible Markup Language):可扩展标记语言。XML与操作系统、编程语言的开发平台无关,能够用于实现不同系统之间的数据交换。

XML的作用

①数据交互
②配置应用程序和网站
③Ajax基石

XML文档结构

在这里插入图片描述
XML文档结构:
1.声明 一般是XML文档的第一行
2.文档描述信息
声明的组成:
version:文档符合xml1.0规范
encoding:文档字符编码,默认为UTF-8
文档结构解释:
根元素:只有一个
根元素的开始标签:放在最前面
根元素的结束标签:放在最后面
标签内容在开始标签和结束标签之间

XML标签

XML文档内容由一系列标签元素组成
<元素名 属性名=“属性值”>元素内容</元素名>
注意:
属性值用双引号包裹
一个元素可以有多个属性
属性值中不能直接包含<、“、&
不建议使用的字符:‘、>

XML编写注意事项

①所有XML元素都必须有结束标签
②XML标签对大小写敏感
③XML必须正确的嵌套
④同级标签以缩进对齐
⑤元素名称可以包含字母、数字或其他的字符
⑥元素名称不能以数字或者标点符号开始
⑦元素名称中不能含空格
示例
将表中的数据用XML文档表示出来

学生姓名预计得分实际得分
王显明7580
宋佳7588
<?xml version="1.0" encoding="UTF-8" ?>
<students>
    <student>
        <name>王明显</name>
        <guessScore>75</guessScore>
        <realScore>80</realScore>
    </student>
    <student>
        <name>宋佳</name>
        <guessScore>75</guessScore>
        <realScore>88</realScore>
    </student>
</students>
XML解析器

解析器类型
①非验证解析器:检查文档格式是否良好
②验证解析器:使用DTD检查文档的有效性

解析XML技术

①DOM
基于XML文档树结构的解析
适用于多次访问的XML文档
特点:比较消耗资源
②SAX
基于事件的解析
适用于大数据量的XML文档
特点:占用资源少,内存消耗小
③DOM4J
非常优秀的Java XML API
性能优异、功能强大
开放源代码

DOM解析XML

**DOM:**文档对象模型(Document Object Model),DOM把XML文档映射成一个倒挂的树。

<book >
    <title>三国演义</title>
    <author>罗贯中</author>
    <price>30元</price>
</book>

上述xml代码可表示的树为:
在这里插入图片描述
常用接口介绍

常用接口常用方法说明
Document:表示整个 XML 文档NodeList getElementsByTagName(String Tag)按文档顺序返回文档中指定标记名称的所有元素集合
Node:该文档树中的单个节点NodeList getChildNodes()获取该元素的所有子节点,返回节点集合
Element:XML 文档中的一个元素String getTagName()获取元素名称
java代码对xml文件的查看与增加

DOM解析XML文件步骤:
①创建解析器工厂对象
②解析器工厂对象创建解析器对象
③解析器对象指定XML文件创建Document对象
④以Document对象为起点操作DOM树
保存xml文件步骤
①获得TransformerFactory对象
②创建Transformer对象
③创建DOMSource对象(包含XML信息)
④设置输出属性:编码格式
⑤创建StreamResult对象(包含保存文件的信息)
⑥将XML保存到指定文件中

直接上代码:

// 新建phone.xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<phoneInfo>
    <brand name="华为">
        <type name="p30"/>
        <type name="mate30"/>
        <type name="p40pro"/>
    </brand>
    <brand name="苹果">
        <type name="iphone11p"/>
        <type name="iphoneX"/>
    </brand>
<brand name="三星">
        <type name="note20"/>
    </brand>
</phoneInfo>
public class TestXML {
    public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
    	// 创建解析器工厂对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        // 创建解析器对象
        DocumentBuilder db =  dbf.newDocumentBuilder();
        // 解析器对象指定XML文件创建Document对象
        Document document = db.parse("phone.xml");
        // 获取node列表
        NodeList brand = document.getElementsByTagName("brand");
        // 遍历node
        for (int i = 0; i < brand.getLength(); i++) {
            Node item = brand.item(i);
            Element e = (Element)item;
            // 获取当前节点的name属性值
            System.out.println(e.getAttribute("name"));
            // 获取子节点
            NodeList type = e.getElementsByTagName("type");
            // 遍历子节点
            for (int j = 0; j < type.getLength(); j++) {
                Node item1 = type.item(j);
                Element e2 =(Element)item1;
                // 输出type子节点的name属性值
                System.out.println(e2.getAttribute("name"));
            }
        }
        // 增加一个brand节点
       	// 获取根节点
        Node root = document.getElementsByTagName("phoneInfo").item(0);
        // 创建一个brand节点
        Element sx = testXML.document.createElement("brand");
        // 设置brand节点的name属性
        sx.setAttribute("name","三星");
        // 创建type节点
        Element sxType = testXML.document.createElement("type");
        // 设置type节点的name属性
        sxType.setAttribute("name","note20");
        // 将type节点追加到brand节点中
        sx.appendChild(sxType);
        // 将brand节点追加到根节点
        root.appendChild(sx);
        // 保存更改
        // 获得TransformerFactory对象
        TransformerFactory tf =TransformerFactory.newInstance();
        // 设置缩进
        tf.setAttribute("indent-number",4);
        Transformer t =tf.newTransformer();
        t.setOutputProperty(OutputKeys.INDENT,"yes");// 换行
        t.setOutputProperty(OutputKeys.ENCODING,"utf-8");//标注字符编码
        DOMSource source = new DOMSource(document);
        // 输出流写入xml文件
        FileOutputStream fos = new FileOutputStream("phone.xml");
        StreamResult sr = new StreamResult(new OutputStreamWriter(fos));// 只有用writer才能缩进
        t.transform(source,sr);
	}        
]

JSON

JSON简介

①JSON(JavaScript Object Notation)是JavaScript中的对象表示法
②轻量级的文本数据交换格式,独立于JavaScript语言
③具有自我描述性
④比XML传输速度快

JSON语法规则

①数据由名称/值对构成
②数据之间由逗号分隔
③大括号内为对象
④中括号内为数组
示例

{
	"name":"jason",
	"age":20,
	"skills":["Java","Hadoop","Python"]
}
java对象转为JSON
// Student类
public class Student implements Serializable {
    private int id;
    private String name;
    private String sex;
    private double score;

    public Student() {
    }

    public Student(int id, String name, String sex, double score) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.score = score;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", score=" + score +
                '}';
    }
}
// 测试类
public class TestJson {
    public static void main(String[] args) {
        Student s = new Student(1,"张三","男",65.5);
        // java对象转为JSON字符串
        String jsonString = JSON.toJSONString(s);
        System.out.println(jsonString);
        //JSON对象转java对象
        Object o = JSON.parse(jsonString);
        JSONObject jsonObject = JSON.parseObject(jsonString);
        Student t = JSON.toJavaObject(jsonObject,Student.class);
        System.out.println(t);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值