zoukankan      html  css  js  c++  java
  • Java笔记16

    XML简介

    • 可扩展标记语言
      • 纯文本, 默认使用UTF-8
      • 可嵌套, 适合表示结构化数据

    XML的结构

    • 首行表示版本, 可选的编码.

    • 只有一个根元素, 并包含任意个子元素, 元素可以包含属性

    • 空元素, 可以用<tag />表示

    • 特殊符号需要转移

      • < <
      • > >
      • & &
      • " "
      • ' '
    • DTD文档指定一系列规则

      • 根元素必须是book
      • book元素必须包含name, author等指定元素
      • isbn元素必须包含属性lang
    • 浏览器对HTML有一定的包容性, 但对XML非常严格

    • XML是一个技术体系:

      • DTD/XSD: 验证xml结构和数据是否有效
      • Namespace: xml节点和属性的名字空间
      • XSLT: 把xml转化为另一种文本
      • XPath: 一种xml节点查询语言

    使用DOM

    • 两种解析方式:
      • DOM: 一次性读取XML, 并再内存中表示为树形结构
      • SAX: 以流的形式读取XML, 使用事件回调

    使用SAX

    • 使用Handler进行回调函数监听

    使用Jackson

    • 引包就完了, 不过这环境问题, 可折腾了有一会..
    • mvn环境和eclipse环境, 还有不熟悉的java版本环境.. 折腾了有一会.

    使用JSON

    • 特点:

      • JSON只能使用UTF-8编码, 不存在编码问题
      • JSON只允许使用双引号作为key, 特殊字符用转义, 格式简单
      • 浏览器内置JSON支持
    • REST API: 使用JSON.

    • 可以引入指定的解析规则, 解析指定的字段

    • 可以自定义解析规则

    • Jackson可以实现JavaBean和JSON之间的转化

    • 可以通过Module扩展Jack能处理数据的能力

    • 自定义JsonSerializerJsonDeserializer进行序列化和反序列化

    
    public class UseJSON {
      public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
        InputStream input = UseJSON.class.getResourceAsStream("/book.json");
        ObjectMapper mapper = new ObjectMapper().registerModule(new JavaTimeModule());
        // 反序列化, 忽略不存在的JavaBean属性
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        Book book = mapper.readValue(input, Book.class);
        System.out.println(book.name);
        System.out.println(book.isbn);
      }
    }
    
    class Book {
        public String name;
        // 使用注解, 表示反序列化时使用自定义的IbsnDeserializer
        @JsonDeserialize(using = IsbnDeserializer.class)
        public BigInteger isbn;
    }
    
    // 自定义解析规则, 解析非数字的
    class IsbnDeserializer extends JsonDeserializer<BigInteger> {
      public BigInteger deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        String s = p.getValueAsString();
        if (s != null) {
          try {
            return new BigInteger(s.replace("-", ""));
          } catch (NumberFormatException e) {
            throw new JsonParseException(p, s, e);
          }
        }
        return null;
      }
    }
    
  • 相关阅读:
    《软件架构设计》温昱著读后感(一)
    质量属性II(信息领域热词分析)
    质量属性
    2020寒假学习进度报告16
    2020寒假学习进度报告15
    Nginx运行报错unknown directive ""
    使用ajax的几种方式
    Shiro中@RequiresAuthentication等等注解介绍
    shiro自定义异常无法被捕获总是抛出AuthenticationException解决方案
    java中String和int相互转换常用方法详解
  • 原文地址:https://www.cnblogs.com/zhangrunhao/p/13186885.html
Copyright © 2011-2022 走看看