zoukankan      html  css  js  c++  java
  • xml json

    1 xml特征

    • 一是纯文本,默认使用UTF-8编码
    • 可嵌套
    • XML有固定的结构,首行必定是
    • 只有一个根节点
    • 遇见特殊字符必须转义

    2 常见的转义

    字符 符号
    < <
    > >
    & &
    " "
    ' '

    3 使用DOM

    DOM是Document Object Model的缩写,DOM模型就是把XML结构作为一个树形结构处理,从根节点开始,每个节点都可以包含任意个子节点。
    这是一段xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <book id="1">
        <name>Java核心技术</name>
        <author>Cay S. Horstmann</author>
        <isbn lang="CN">1234567</isbn>
        <tags>
            <tag>Java</tag>
            <tag>Network</tag>
        </tags>
        <pubDate/>
    </book>
    

    解析后的dom如下
    image.png

    4 使用dom api来解析xml

    1,获取dom对象

    InputStream input = Main.class.getResourceAsStream("/book.xml");
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(input);
    

    2,遍历dom对象获得节点的属性和值,内容

    void printNode(Node n, int indent) {
        for (int i = 0; i < indent; i++) {
            System.out.print(' ');
        }
        switch (n.getNodeType()) {
        case Node.DOCUMENT_NODE: // Document节点
            System.out.println("Document: " + n.getNodeName());
            break;
        case Node.ELEMENT_NODE: // 元素节点
            System.out.println("Element: " + n.getNodeName());
            break;
        case Node.TEXT_NODE: // 文本
            System.out.println("Text: " + n.getNodeName() + " = " + n.getNodeValue());
            break;
        case Node.ATTRIBUTE_NODE: // 属性
            System.out.println("Attr: " + n.getNodeName() + " = " + n.getNodeValue());
            break;
        default: // 其他
            System.out.println("NodeType: " + n.getNodeType() + ", NodeName: " + n.getNodeName());
        }
        for (Node child = n.getFirstChild(); child != null; child = child.getNextSibling()) {
            printNode(child, indent + 1);
        }
    }
    

    5 使用Jackson

    使用Jackson可以轻松把解析到的xml封装到javabean中
    ,下面是一个代码

    InputStream input = Main.class.getResourceAsStream("/book.xml");
    JacksonXmlModule module = new JacksonXmlModule();
    XmlMapper mapper = new XmlMapper(module);
    Book book = mapper.readValue(input, Book.class);
    System.out.println(book.id);
    System.out.println(book.name);
    System.out.println(book.author);
    System.out.println(book.isbn);
    System.out.println(book.tags);
    System.out.println(book.pubDate);
    

    6 JSON

    一个典型的json

    {
        "id": 1,
        "name": "Java核心技术",
        "author": {
            "firstName": "Abc",
            "lastName": "Xyz"
        },
        "isbn": "1234567",
        "tags": ["Java", "Network"]
    }
    

    6-1 json优势

    JSON只允许使用UTF-8编码,不存在编码问题;
    JSON只允许使用双引号作为key,特殊字符用转义,格式简单;
    浏览器内置JSON支持,如果把数据用JSON发送给浏览器,可以用JavaScript直接处理。

    6-2 json支持的格式

    键值对:{"key": value}
    数组:[1, 2, 3]
    字符串:"abc"
    数值(整数和浮点数):12.34
    布尔值:true或false
    空值:null

    6-3 序列化:Javabean转Json

    InputStream input = Main.class.getResourceAsStream("/book.json");
    ObjectMapper mapper = new ObjectMapper();
    // 反序列化时忽略不存在的JavaBean属性:
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    Book book = mapper.readValue(input, Book.class);
    

    核心代码是创建一个ObjectMapper对象。关闭DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES功能使得解析时如果JavaBean不存在该属性时解析不会报错。

    6-4 反序列化:json转javabean

    String json = mapper.writeValueAsString(book);
    
  • 相关阅读:
    关于java集合框架(二):List
    仪式感
    java的foreach(增强for循环)
    关于Java集合框架(一):概述与Set
    重新开始
    简单fork循环分析
    fork,写时复制(copy-on-write),vfork
    树莓派换源
    Windows下TexLive2018环境配置及检测
    Linux下高精度时间
  • 原文地址:https://www.cnblogs.com/hellosiyu/p/13111771.html
Copyright © 2011-2022 走看看