JSON 详解

在Web1.0时代 页面输错一个,全部都要重新输入
在Wen2.0时代 Ajax横空出世
JSON

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

在JS语言中,一切都是对象.因此任何类型都可以通过JSON来表示

格式:
对象表示为键值对
数据由逗号分隔
花括号保存对象
方括号保存数组

{"name":"haxi"}
{"age":"18"}
{"sex":"男"}
事实上,JSON是JS的字符串表示法,它使用文本表示一个JS对象的信息,本质是一个字符串


    
        
        
    
    
        
    

在此Web应用时代,尤其是前后端分离项目,JSON就是王者

pom.xml依赖

    
        
            org.springframework
            spring-webmvc
            5.0.2.RELEASE
        
        
            org.springframework
            spring-web
            5.0.2.RELEASE
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.9.9
        
    

web.xml



  
  
    DispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
    
      contextConfigLocation
      classpath:springmvc.xml
    
    
    1
  
  
    DispatcherServlet
    /
  
  

springmvc.xml




    
    

    
    
        
        
            
                
            
            
                
                    
                        
                    
                
            
        
    

User.java

package cn.icanci.pojo;

/**
 * @Author: icanci
 * @ProjectName: json
 * @PackageName: cn.icanci.pojo
 * @Date: Created in 2020/2/21 21:53
 * @ClassAction:
 */
public class User {
    private String name;
    private int age;
    private String sex;

    public User() {
    }

    public User(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

UserController.java

package cn.icanci.contorller;

import cn.icanci.pojo.User;
import cn.icanci.utils.JsonUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @Author: icanci
 * @ProjectName: json
 * @PackageName: cn.icanci.contorller
 * @Date: Created in 2020/2/21 21:53
 * @ClassAction:
 */
@Controller
public class UserController {
    @RequestMapping("/json1")
    @ResponseBody
    public String json1() throws Exception {
        //思考 正常返回是返回视图解析器 而JSON需要返回一个字符串
        //有很多第三方jar包.可以实现这个功能 比如 jackson 只需要一个简单的注解就可以实现了
        // @ResponseBody,将服务器返回的对象转换为json对象
        //@RequestBody

        //需要一个jackson对象的映射器 就是一个类 可以直接将对象转换为json对象
        ObjectMapper objectMapper = new ObjectMapper();
        //创建一个对象
        User user = new User("hahah", 12, "女");
        //将java对象转换为json
        String string = objectMapper.writeValueAsString(user);
        System.out.println(string);
        //由于使用了 @ResponseBody,这里会返回json格式的字符串
        return string;
    }

    //发现问题 中文乱码 需要给 @RequestMapper添加注解的一个属性

    @RequestMapping(value = "/json2",produces ="application/json;charset=utf-8")
    @ResponseBody
    public String json2() throws Exception {
        //需要一个jackson对象的映射器 就是一个类 可以直接将对象转换为json对象
        ObjectMapper objectMapper = new ObjectMapper();
        //创建一个对象
        User user = new User("嘻嘻嘻", 12, "女");
        //由于使用了 @ResponseBody,这里会返回json格式的字符串
        return objectMapper.writeValueAsString(user);
    }

    @RequestMapping(value = "/json3")
    @ResponseBody
    public String json3() throws Exception {
        //需要一个jackson对象的映射器 就是一个类 可以直接将对象转换为json对象
        ObjectMapper objectMapper = new ObjectMapper();
        //创建一个对象
        User user = new User("嘻嘻嘻", 12, "女");
        List list = new ArrayList<>();
        list.add(user);
        list.add(user);
        list.add(user);
        list.add(user);
        list.add(user);
        //由于使用了 @ResponseBody,这里会返回json格式的字符串
        return objectMapper.writeValueAsString(list);
    }

    @RequestMapping(value = "/json4")
    @ResponseBody
    public String json4() throws Exception {
        Date date = new Date();
        System.out.println(date);
        //发现问题 返回的是时间戳 Timestamp
        return new ObjectMapper().writeValueAsString(date);
    }

    @RequestMapping(value = "/json5")
    @ResponseBody
    public String json5() throws Exception {
        //发现问题 返回的是时间戳 Timestamp
        //如何不返回时间戳 关闭时间功能
        //时间格式话问题
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS,false);
        //自定义时间日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        objectMapper.setDateFormat(sdf);
        return new ObjectMapper().writeValueAsString(new Date());
    }

    //发现问题 重复代码太多 需要重构  JsonUtils

    @RequestMapping(value = "/json6")
    @ResponseBody
    public String json6() throws Exception {
        Date date = new Date();
        return JsonUtils.getDateJson(date);
    }
}

封装的工具类 JsonUtils.java

package cn.icanci.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.http.converter.StringHttpMessageConverter;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Author: icanci
 * @ProjectName: json
 * @PackageName: cn.icanci.utils
 * @Date: Created in 2020/2/21 22:41
 * @ClassAction: JSON工具类
 */
public class JsonUtils {
    public static String getDateJson(Object obj){
        return getDateJson(obj,"yyyy-MM-dd HH:mm:ss");
    }

    public static String getDateJson(Object obj,String dateFormat){
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS,false);
        //自定义时间日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        objectMapper.setDateFormat(sdf);
        try {
            return new ObjectMapper().writeValueAsString(new Date());
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
}

放在最后 这里是不变的 以后需要直接拿来用就可以了


    
        
        
            
                
            
            
                
                    
                        
                    
                
            
        
    
推荐文章: https://www.jb51.net/article/107775.htm

你可能感兴趣的:(JSON 详解)