Json语法格式和XML语言

Json

一、简介

JSON(JavaScript Object Notation, JS 对象标记) 是⼀种轻量级的数据交换格式。它基于ECMAScript的⼀个⼦集,采⽤完全独⽴于编程语⾔的⽂本格式来存储和表示数据。简洁和清晰的层次结构使得JSON 成为理想的数据交换语⾔。易于⼈阅读和编写,同时也易于机器解析和⽣成,并有效地提升⽹络传输效率。

二、语法

JSON对象的语法有三种:对象、数组、混合模式

在这里插入图片描述

三、书写规范

1、使⽤{}和[]书写,{}表示对象类型,[]表示数组类型

2、.对象类型中每组数据之间⽤逗号隔开,每组中的关键字与值之间⽤冒号隔开

3、数组类型中每个值之间⽤逗号隔开,最后⼀个值后⾯不要加逗号

四、工具介绍

1、JSON在线解析⼯具:http://www.bejson.com/

作⽤:

1.校验JSON数据的语法是否正确

2.将不规范的JSON格式数据进⾏格式化

2、常⻅的json转换⼯具

json的转换⼯具是通过java封装好的⼀些jar⼯具包,直接将java对象或集合转换成json格式的字符串。

五、应用

  • Jackson使用:

    1. 导⼊json相关jar包

    在这里插入图片描述

    1. 创建java对象或集合

    2. 使⽤jackson的ObjectMapper对象的writeValueAsString⽅法进⾏转换

import com.fasterxml.jackson.databind.ObjectMapper;
import com.ujiuye.pojo.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@WebServlet("/jackson")
public class jackson extends HttpServlet {
    
    
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
    
    
     //创建User对象
     User user = new User();
     user.setUid(1001);
     user.setUsername("柳岩");
     user.setPassword("123");
     //创建List集合
     List<String> list = new ArrayList<>();
     list.add("Java研发⼯程师");
     list.add("web前端⼯程师");
     list.add("UI设计师");
     //创建Map集合
     Map<String, User> map = new HashMap<>();
     map.put("user", user);
     //转换json
     ObjectMapper mapper = new ObjectMapper();
     String userJson = mapper.writeValueAsString(user);
     String listJson = mapper.writeValueAsString(list);
     String mapJson = mapper.writeValueAsString(map);
     System.out.println(userJson);
     System.out.println(listJson);
     System.out.println(mapJson);
}}

六、案例

案例需求: 搜索框⾃动补全

在输⼊框输⼊关键字,下拉框中异步显示与该关键字相关的数据

jsp代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html> 
    <head> 
        <title>$Title$</title> 
        <style type="text/css">
            * {
                margin: 0px;
                padding: 0px;
            }
            #box {
                display: inline-block;
            }
            #search {
                width: 545px;
                height: 42px;
                border-color: #4E6EF2;
                border-top-left-radius: 10px;
                border-bottom-left-radius: 10px;
                float: left;
            }
            #btn {
                width: 108px;
                height: 42px;
                background-color: #4e6ef2;
                color: #fff;
                border: none;
                font-size: 17px;
                font-weight: 400;
                border-top-right-radius: 10px;
                border-bottom-right-radius: 10px;
                float: left;
            }
            #show {
                width: 545px;
                border: 1px solid #4e6ef2;
                position: relative;
                left: -55px;
                text-align: left;
            }
        </style>
        <script src="./js/jquery-3.3.1.js"></script>
        <script>
            $(function(){
                //绑定键盘弹起事件
                $("#search").bind('input porpertychange',function(){
                    //获取输⼊框的值
                    var word = $(this).val();
                    //判断不为空
                    if(word != ""){
                        console.log(word)
                        //发送ajax请求
                        $.ajax({
                            url:"searchWord",
                            data:{"word":word},
                            type:"post",
                            dataType:"json",
                            success:function(obj){
                                var htmlStr = "";
                                for(var i = 0; i < obj.length; i++){
                                    //console.log(obj[i].sname)
                                    htmlStr += "<div>"+obj[i].sname+"</div>";
                                }
                                $("#show").html(htmlStr).show();
                            }
                        })
                    }else{
                        $("#show").hide();
                    }
                })
            })
        </script>
    </head>
    <body>
        <center>
            <img alt="" width="310" height="150"
                 src="${pageContext.request.contextPath }/img/baidu.png"><br/>
            <div id="box">
                <input id="search" type="text" name="search"/>
                <button id="btn">百度⼀下</button>
            </div>
            <div id="show">
            </div>
        </center>
    </body>
</html>
  • Servlet代码
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ujiuye.pojo.Student;
import com.ujiuye.service.SearchService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/searchWord")
public class SearchWordServlet extends HttpServlet {
    
    
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    
    
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //获取word值
        String word = request.getParameter("word");
        //业务处理
        SearchService ss = new SearchService();
        List<Student> sList = ss.searchWord(word);
        //判断
        if(sList != null && sList.size() > 0){
    
    
            //将集合转换成json
            ObjectMapper mapper = new ObjectMapper();
            String strJson = mapper.writeValueAsString(sList);
            System.out.println(strJson);
            //响应⻚⾯
            response.getWriter().write(strJson);
        }}}
  • Service层
package com.ujiuye.service;
import com.ujiuye.dao.SearchDao;
import com.ujiuye.pojo.Student;
import java.util.List;
public class SearchService {
    
    
    public List<Student> searchWord(String word) {
    
    
        SearchDao sd = new SearchDao();
        return sd.searchWord(word);
    }}
  • Dao层
import com.ujiuye.pojo.Student;
import com.ujiuye.utils.C3P0Utils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.SQLException;
import java.util.List;
public class SearchDao {
    
    
    public List<Student> searchWord(String word) {
    
    
        try {
    
    
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            String sql = "select * from student where sname like ?";
            List<Student> sList = qr.query(sql, new BeanListHandler<Student>(Student.class),
                                           "%"+word+"%");
            return sList;
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
        return null; }
}
  • 效果

在这里插入图片描述

七、转Jason格式工具类

工具类一

(对象转jason、Jason转对象)

package com.offcn.utils;

import java.util.List;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;


public class JsonUtils {
    
    

    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * 将对象转换成json字符串。
     * <p>Title: entityToJson</p>
     * <p>Description: </p>
     * @param data
     * @return
     */
    public static String objectToJson(Object data) {
    
    
    	try {
    
    
			String string = MAPPER.writeValueAsString(data);
			return string;
		} catch (JsonProcessingException e) {
    
    
			e.printStackTrace();
		}
    	return null;
    }
    
    /**
     * 将json结果集转化为对象
     * 
     * @param jsonData json数据
     * @param clazz 对象中的object类型
     * @return
     */
    public static <T> T jsonToEntity(String jsonData, Class<T> beanType) {
    
    
        try {
    
    
            T t = MAPPER.readValue(jsonData, beanType);
            return t;
        } catch (Exception e) {
    
    
        	e.printStackTrace();
        }
        return null;
    }
    
    /**
     * 将json数据转换成entity对象list
     * <p>Title: jsonToList</p>
     * <p>Description: </p>
     * @param jsonData
     * @param beanType
     * @return
     */
    public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
    
    
    	JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
    	try {
    
    
    		List<T> list = MAPPER.readValue(jsonData, javaType);
    		return list;
		} catch (Exception e) {
    
    
			e.printStackTrace();
		}
    	
    	return null;
    }
    
}

工具类二

对象转jason

package com.chenshuang.utils;

import com.chenshuang.entity.ResultVo;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.http.HttpServletResponse;

public class ObjToJson {
    
    
    public static String objToJson(ResultVo vo, HttpServletResponse response) {
    
    
        try {
    
    
            // 1、创建核心对象
            ObjectMapper mapper = new ObjectMapper();

            String json = mapper.writeValueAsString(vo);
            response.setContentType("text/html;charset=utf-8");
            return json;
        } catch (JsonProcessingException e) {
    
    
            throw new RuntimeException(e);
        }
    }
}

XML

一、简介

XML 指可扩展标记语⾔(EXtensible Markup Language),是⼀种标记语⾔,很类似 HTML,设计宗旨是传输数据,⽽⾮显示数据。标签没有被预定义。您需要⾃⾏定义标签。

二、语法

1、⽂档声明:

<?xml version="1.0" encoding="UTF-8"?>

2、⾃定义标签:

<根标签>

<⼦标签 属性=“值”>内容</⼦标签>

<⼦标签 属性=“值”>内容</⼦标签>

</根标签>

三、约束

DTD(⽂档类型定义)的作⽤是定义 XML ⽂档的合法构建模块。

<?xml version="1.0"?>
<!DOCTYPE note [
 <!ELEMENT note (to+,from,heading,body)>
 <!ELEMENT to (#PCDATA)>
 <!ELEMENT from (#PCDATA)>
 <!ELEMENT heading (#PCDATA)>
 <!ELEMENT body (#PCDATA)>
 ]>
<note>
    <to>xx</to>
    <to></to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
</note>

XML Schema 是基于 XML 的 DTD 替代者,XML Schema 描述 XML ⽂档的结构。

student.xsd⽂件:
<?xml version="1.0"?>
<xsd:schema xmlns="http://www.ujiuye.com"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.ujiuye.com" elementFormDefault="qualified">
    <xsd:element name="students" type="studentsType"/>
    <xsd:complexType name="studentsType">
        <xsd:sequence>
            <xsd:element name="student" type="studentType" minOccurs="0"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="studentType">
        <xsd:sequence>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="age" type="ageType" />
            <xsd:element name="sex" type="sexType" />
        </xsd:sequence>
        <xsd:attribute name="number" type="numberType" use="required"/>
    </xsd:complexType>
    <xsd:simpleType name="sexType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="male"/>
            <xsd:enumeration value="female"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="ageType">
        <xsd:restriction base="xsd:integer">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="256"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="numberType">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="\d{4}"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>

student.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!--
 1、编写根标签
 2、引⼊实例名称空间 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3、引⼊名称空间 xsi:schemaLocation="http://www.ujiuye.cn/xml student.xsd" 
 4、引⼊默认的名称空间
-->
<students
          xmlns="http://www.ujiuye.com"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.ujiuye.com student.xsd"
          >
    <student number="1111">
        <name>tom</name>
        <age>111</age>
        <sex>male</sex>
    </student>
</students>

猜你喜欢

转载自blog.csdn.net/PIKapikaaaa/article/details/124914475
今日推荐