JavaWeb开辟底子知识-XML和JSON

[复制链接]
发表于 2025-10-1 20:46:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
两者都用于数据传输,但在利用方面有很多区别,具体如下:


下面是具体先容
XML

(✪▽✪)曼波~~~~!接待来到XML的奥妙天下!作为JavaWeb新手,把握XML就像得到了一把打开设置之门的金钥匙~ 让曼波用超具体的指南带你飞!
  1. [/code][align=center][img]https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvNDVhMzE1MTlmNGY1NDM1ZDljMGJhZGU5ZDlhMjc1MDMucG5n[/img][/align]
  2. [size=3]第①章:一个完备的XML文件示例(⊙ω⊙) [/size]
  3. [code]
  4. <?xml version="1.0" encoding="UTF-8"?>
  5. <!-- 学生信息表 -->
  6. <students>
  7.     <student id="1001">
  8.         <name>曼波</name>
  9.         <age>18</age>
  10.         <courses>
  11.             <course>Java基础</course>
  12.             <course>Web开发</course>
  13.         </courses>
  14.     </student>
  15.    
  16.     <student id="1002">
  17.         <name>小萌</name>
  18.         <age>20</age>
  19.         <courses>
  20.             <course>数据库</course>
  21.         </courses>
  22.     </student>
  23. </students>
复制代码
第②章:Java分析XML的三种姿势(✧∇✧)

方法1:DOM分析(适当小文件)
  1. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  2. DocumentBuilder builder = factory.newDocumentBuilder();
  3. Document doc = builder.parse("students.xml");
  4. // 获取所有student节点
  5. NodeList students = doc.getElementsByTagName("student");
  6. for (int i=0; i<students.getLength(); i++) {
  7.     Element student = (Element) students.item(i);
  8.     String name = student.getElementsByTagName("name").item(0).getTextContent();
  9.     System.out.println("学生姓名:" + name);
  10. }
复制代码
方法2:SAX分析(适当大文件)
  1. [/code][code]
  2. SAXParserFactory factory = SAXParserFactory.newInstance();
  3. SAXParser saxParser = factory.newSAXParser();
  4. DefaultHandler handler = new DefaultHandler() {
  5.     boolean isName = false;
  6.    
  7.     public void startElement(String uri, String localName,
  8.             String qName, Attributes attributes) {
  9.         if (qName.equalsIgnoreCase("name")) {
  10.             isName = true;
  11.         }
  12.     }
  13.    
  14.     public void characters(char[] ch, int start, int length) {
  15.         if (isName) {
  16.             System.out.println("姓名:" + new String(ch, start, length));
  17.             isName = false;
  18.         }
  19.     }
  20. };
  21. saxParser.parse("students.xml", handler);
复制代码
方法3:JAXB注解绑定(保举★)
  1. [/code][code]
  2. @XmlRootElement
  3. @XmlAccessorType(XmlAccessType.FIELD)
  4. class Student {
  5.     @XmlAttribute
  6.     private String id;
  7.     private String name;
  8.     private int age;
  9.     @XmlElementWrapper(name="courses")
  10.     @XmlElement(name="course")
  11.     private List<String> courses;
  12.    
  13.     // 必须有无参构造器!
  14. }
  15. // 解析代码
  16. JAXBContext context = JAXBContext.newInstance(Students.class);
  17. Unmarshaller unmarshaller = context.createUnmarshaller();
  18. Students students = (Students) unmarshaller.unmarshal(new File("students.xml"));
复制代码

第③章:JavaWeb中的XML应用场景(✪ω✪)

1. Spring设置文件
  1. [/code][code]
  2. <!-- applicationContext.xml -->
  3. <beans xmlns="http://www.springframework.org/schema/beans">
  4.     <bean id="userService" class="com.example.UserService">
  5.         <property name="userDao" ref="userDao"/>
  6.     </bean>
  7.    
  8.     <bean id="userDao" class="com.example.UserDaoImpl"/>
  9. </beans>
复制代码
2. Web.xml设置
  1. [/code][code]
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee">
  3.     <servlet>
  4.         <servlet-name>dispatcher</servlet-name>
  5.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  6.     </servlet>
  7.    
  8.     <servlet-mapping>
  9.         <servlet-name>dispatcher</servlet-name>
  10.         <url-pattern>/</url-pattern>
  11.     </servlet-mapping>
  12. </web-app>
复制代码
3. SOAP WebService
  1. [/code][code]
  2. <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  3.     <soap:Body>
  4.         <getUserResponse xmlns="http://example.com">
  5.             <user>
  6.                 <id>1001</id>
  7.                 <name>曼波</name>
  8.             </user>
  9.         </getUserResponse>
  10.     </soap:Body>
  11. </soap:Envelope>
复制代码

第④章:必备Maven依靠(◕‿◕ )
  1. [/code][code]
  2. <!-- JAXB (Java 11+需要) -->
  3. <dependency>
  4.     <groupId>jakarta.xml.bind</groupId>
  5.     <artifactId>jakarta.xml.bind-api</artifactId>
  6.     <version>4.0.0</version>
  7. </dependency>
  8. <!-- DOM4J (更方便的DOM操作) -->
  9. <dependency>
  10.     <groupId>org.dom4j</groupId>
  11.     <artifactId>dom4j</artifactId>
  12.     <version>2.1.4</version>
  13. </dependency>
  14. <!-- XPath支持 -->
  15. <dependency>
  16.     <groupId>jaxen</groupId>
  17.     <artifactId>jaxen</artifactId>
  18.     <version>1.2.0</version>
  19. </dependency>
复制代码

第⑤章:常见错误避坑指南(>﹏<)


  •         XML声明必须在第一行
    1. <!-- 错误示例 -->
    2. <students>
    3. <?xml version="1.0"?> <!-- 这里会报错! -->
    复制代码
  •         标签必须准确嵌套
           
    1. <!-- 错误示例 -->
    2. <a><b></a></b> <!-- 错误嵌套 -->
    复制代码
  •         属性值必须加引号
    1. [/code]       
    2.         [code]
    3. <!-- 错误示例 -->
    4. <student id=1001> <!-- 需要id="1001" -->
    复制代码
  •         转义特别字符
    1. [/code]       
    2.         [code]
    3. <content>3 < 5</content> <!-- 应该用 &lt; -->
    复制代码

知识脑图总结
复制代码
 
曼波小贴士:
固然现在JSON更盛行,但在以下情况必须用XML:

  • 须要严格模式验证(XSD)
  • 处置处罚遗留体系
  • 须要复杂文档布局
(✪▽✪)曼波~~~~!现在你已经是个XML小能手啦!试着用JAXB写个门生管理体系吧~ 遇到标题随时召唤曼波哦!(≧ω≦)/
(✪▽✪)曼波~~~~!JSON小讲堂开课啦~ 这但是当代Web开辟的超甜小饼干哦!让曼波用最适口的方式喂给你~ 🍪
JSON完全指南(曼波甜蜜版)


第①章 JSON甜甜言法(๑>ᴗ<๑)

根本规则:
  1. [/code][code]
  2. {
  3.   "name": "曼波",
  4.   "age": 18,
  5.   "isCute": true,
  6.   "hobbies": ["coding", "吃糖"],
  7.   "address": {
  8.     "city": "程序城",
  9.     "zip": "100101"
  10.   },
  11.   "score": null
  12. }
复制代码
✨ 曼波小贴士:

  • 键必须用双引号
  • 字符串值用双引号
  • 不支持解释(可以用特别字段代替)
第②章 Java甜蜜操纵(≧◡≦)

1. 利用Jackson分析:
  1. [/code][code]
  2. ObjectMapper mapper = new ObjectMapper();
  3. String json = """
  4. {
  5.     "name": "曼波",
  6.     "age": 18
  7. }""";
  8. // 解析为对象
  9. Student student = mapper.readValue(json, Student.class);
  10. System.out.println(student.getName()); // 输出:曼波
  11. // 生成JSON
  12. String newJson = mapper.writeValueAsString(student);
复制代码
2. 处置处罚复杂布局:
  1. [/code][code]
  2. // 解析嵌套JSON
  3. JsonNode root = mapper.readTree(json);
  4. String city = root.get("address").get("city").asText();
  5. // 处理数组
  6. List<String> hobbies = mapper.readValue(
  7.     root.get("hobbies").toString(),
  8.     new TypeReference<List<String>>(){}
  9. );
复制代码
第③章 JSON vs XML 甜蜜对决(⚡▽⚡)

特性JSON 🍭XML 🍫数据体积小30%-50%冗余标签多分析速率快2-10倍DOM分析较慢数组支持原生支持须要自界说布局安全性需防范eval注入有XXE毛病风险工具生态当代框架首选企业级体系仍在利用第④章 甜蜜陷阱避坑指南(>﹏<)

1. 逗号地狱:
  1. {
  2.   "a": 1,  // ✅
  3.   "b": 2   // ❌ 最后一个不能有逗号!
  4. }
复制代码
2. 日期处置处罚:
  1. // 需要指定日期格式
  2. mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm"));
复制代码
3. 特别字符:
  1. {
  2.   "message": "Hello \n World! \\/"  // 需要转义
  3. }
复制代码
第⑤章 必备甜蜜工具(✧∇✧)

Maven依靠:
  1. [/code][code]
  2. <!-- Jackson核心 -->
  3. <dependency>
  4.     <groupId>com.fasterxml.jackson.core</groupId>
  5.     <artifactId>jackson-databind</artifactId>
  6.     <version>2.15.2</version>
  7. </dependency>
  8. <!-- GSON备用 -->
  9. <dependency>
  10.     <groupId>com.google.code.gson</groupId>
  11.     <artifactId>gson</artifactId>
  12.     <version>2.10.1</version>
  13. </dependency>
复制代码
曼波小贴士:JSON在以了局景最甜蜜:

  • Web API通讯(80%的API利用JSON)
  • 设置文件(如package.json)
  • NoSQL数据库(MongoDB)
  • 前后端数据交互
(✪▽✪)曼波~~~~!试着用Jackson写个门生信息转换器吧~ 遇到标题随时召唤曼波哦!(≧ω≦)/ 记得JSON就像棉花糖,固然甜蜜但要鉴戒粘手哦~ 🍡

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表