什么是JSON

导读:本篇文章讲解 什么是JSON,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

什么是JSON

前后端分离时代:
在这里插入图片描述

一、简介:

1.1、概述

1:JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。
2:采用完全独立于编程语言的文本格式来存储和表示数据。
3:简洁和清晰的层次结构使得JSON成为理想的数据交换语言。
4:易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

在JavaScript语言中,一切都是对象。因此,任何JavaScript支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:
对象表示为键值对,数据由逗号分隔

  • 花括号保存对象
  • 方括号保存数组

1.2、JSON键值对

JSON键值对是用来保存JavaScript对象的一种方式,和JavaScript对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号” “包裹,使用冒号∶分隔,然后紧接着值:
{“name”:”幺鸡”}
{“age”:”18”}
{“sex”:”男”}

很多人搞不清楚JSON和JavaScript对象的关系,甚至连谁是谁都不清楚。其实,可以这么理解:

  • JSON是JavaScript对象的字符串表示法,它使用文本表示一个JS对象的信息,本质是一个字符串。
    Var obj = {a : ”hello”, b : “word”}; //这是一个对象,注意简明也是可以用引号包裹的
    Var json = ‘{“a” : “hello”, “b”: “word”}’; //这是一个JSON字符串,本质就是一个字符串。

1.3、JSON和JavaScript对象转换

  • 要想实现JSON字符串转换成JavaScript对象,要使用JSON.parse()方法:
    var obj = JSON. parse( ’ { “a”: “Hello”,“b”: “world”“)’);
    //结果是{a: ” He1lo” , b: “world” }
  • 要实现从JavaScript对象转换为JSON字符串,使用JSON.stringify()方法:
    var json = JSON .stringify({a: ” Hello” , b: “world” });
    //结果是 ‘{“a” : “hello”, “b”: “word”}’

1.4、测试

1:创建一个新的web项目;
2:在web创建一个新的 .html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script type="text/javascript">

    //编写一个JavaScript对象
    var user = {
        name:"铁锤",
        age:3,
        sex:"男"
    };

    console.log(user);

    //将js对象转换成JSON对象
    var json  = JSON.stringify(user);
    console.log(json);

    console.log("==========");

    //将JSON对象转换成js对象
    var parse = JSON.parse(json);
    console.log(parse);
</script>

</body>
</html>

3:浏览器打开,查看控制台

在这里插入图片描述

二、Controller返回JSON数据

  • Jackson应该是目前比较好的json解析工具了
  • 当然工具不止这—个,比如还有阿里巴巴的fastjson等等。·我们这里使用Jackson,使用它需要导入它的jar包;

1.1、Jackson的使用

1:创建一个新的web项目;导入jackson依赖
2:配置SpringMVC,要解决JSON的乱码问题

<!--JSON乱码问题配置-->
<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg value="UTF-8"/>
        </bean>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper">
                <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                    <property name="failOnEmptyBeans" value="false"/>
                </bean>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

3:创建一个controller包,新建一个类Jackson包下的ObjectMapper; 通过ObjectMapper下的writeValueAsString方法 生成字符串

注意:

  • @RestController //他直接返回一个字符串,不会走视图解析器
  • @Controller 他会走视图解析器
  • @ResponseBody//(配合Controller使用的)它不会走视图解析器,会返回一个字符串
  • @RequestMapping(value = “/j1” ,produces = “application/json;charset=utf-8”),解决一个JSON的乱码问题,当然不会这样在注解上实现,SpringMVC 给我们配置好了,只需要加上一个配置文件就好了,上面有写。
//@Controller  他会走视图解析器
@RestController  //他直接返回一个字符串
public class UserController {

//    @RequestMapping(value = "/j1" ,produces = "application/json;charset=utf-8")
    @RequestMapping("/j1")
    @ResponseBody//(配合Controller使用的)它就不会走视图解析器,会返回一个字符串
    public String json1() throws JsonProcessingException {

        //Jackson,   ObjectMapper
        ObjectMapper mapper = new ObjectMapper();

        User user = new User("铁锤",18,"男");

        String str = mapper.writeValueAsString(user);

        return str;
    }

测试结果:
在这里插入图片描述

返回对象字符串的方式
//返回一个对象的字符串
@RequestMapping("/j2")
public String json2() throws JsonProcessingException {

    ObjectMapper mapper = new ObjectMapper();

    ArrayList<User> userList = new ArrayList<>();

    User user1 = new User("铁锤",18,"男");
    User user2 = new User("铁锤",18,"男");
    User user3 = new User("铁锤",18,"男");
    User user4 = new User("铁锤",18,"男");

    userList.add(user1);
    userList.add(user2);
    userList.add(user3);
    userList.add(user4);

    String string = mapper.writeValueAsString(userList);


    return string;//new ObjectMapper().writeValueAsString(userList);
}

测试结果:
在这里插入图片描述
返回日期字符串的方式:
两种方式:
1:传统的Java程序解决
2:使用ObjectMapper的格式化解决

      //返回一个时间的字符串
    @RequestMapping("/j3")
    public String json3() throws JsonProcessingException {
        //1:传统的java程序解决
        //2:使用ObjectMapper 来格式化输出

        ObjectMapper mapper = new ObjectMapper();


        //自定义日期的格式
        Date date = new Date();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sdf.format(date); //java程序返回.
       
        return mapper.writeValueAsString(format);
    }

使用使用ObjectMapper的格式化解决( mapper.configure())

  //返回一个时间的字符串
    @RequestMapping("/j3")
    public String json3() throws JsonProcessingException {
        //1:传统的java程序解决
        //2:使用ObjectMapper 来格式化输出

        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.CLOSE_CLOSEABLE, false);// //2:使用ObjectMapper 来格式化输出

        //自定义日期的格式
        Date date = new Date();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        mapper.setDateFormat(sdf);

        //ObjectMapper   ,时间解析后的默认格式是 Timestamp:时间戳

        return mapper.writeValueAsString(date);//
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71846.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!