JSON数据交换格式

1、基本简介

  • JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。

  • 采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

  • 数据交换格式不止json一种,只不过json是使用最广泛地;另外还有xml、yaml、bson…

总之JSON就是一种轻量级的前后端交互数据的格式,仅此而已!



2、前端JSON使用

JavaScript语言中一切都是对象,任何类型的数据都能转化为JSON格式:字符串、数字、数组、对象…JS中提供了JSON对象以及两个重要的方法用于转化、解析json格式的数据!

2.1、基本数据转换

使用JSON.stringify()方法转化为json格式、JSON.parse()解析一个JSON格式的数据为JS对象。

console.log("===============JS对象转JSON==================")
var str = "字符串";
var str_json = JSON.stringify(str);
console.log(str);
console.log(str_json);

var arr = [5,"123","str","你好",98];
var arr_json = JSON.stringify(arr);
console.log(arr);
console.log(arr_json);

console.log("===============JSON转JS对象==================")
var json1 = JSON.parse('[5,"123","str","你好",98]');
var json2 = JSON.parse('"字符串"');
console.log(json1);
console.log(json2);

在这里插入图片描述


2.2、对象类型
var person = {
    name: "xiaoming",
    age: 22,
    sex: "男"
};

//对象转化为JSON数据格式
var person_json = JSON.stringify(person);
console.log(person)
console.log(person_json)

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

var user = {
    name: "xiaohong",
    age: 22,
    sex: "女"
};

var arr = [person, user];
var arr_json = JSON.stringify(arr);
console.log(arr)
console.log(arr_json)
console.log("==========================================")

//JSON数据格式转化为对象   parse解析方法
var now = JSON.parse('{"name":"xiaoli","age":22,"sex":"男"}');
console.log(now)

在这里插入图片描述

  • JS对象与JSON格式是不同的,虽然二者都是Key :Value格式,但是JSON中key需要" "包裹,只需要知道JSON格式本质是一个字符串即可!

  • 多个key:value键值对之间使用逗号隔开

  • 对象中的属性用花括号{}包括

  • 数组用方括号[]包括多个对象!JS中一切都是对象!


3、Jackson简单使用

先引入jackson的依赖,如果在运行时出现异常需要将tomcat的lib下也加入jackson的包或者在项目打包lib中加入。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.1</version>
</dependency>

3.1、给前端响应一个字符串
@RequestMapping(value = "/j1", produces = "text/*")
@ResponseBody			//直接响应页面主体,不走视图解析器
public String test1(){
    User user = new User("薯条", 21, "汉子");
    return user.toString();
}

在这里插入图片描述


3.2、pojo转为json字符串
@RequestMapping(value = "/j2", produces = "application/json;charset=utf-8")
@ResponseBody
public String test2() throws JsonProcessingException {
    User user = new User("薯条", 21, "汉子");
    ObjectMapper objectMapper = new ObjectMapper();

    String str = objectMapper.writeValueAsString(user);
    return str;
}

在这里插入图片描述


3.3、集合容器转json字符串

基本上所有的集合框架容器都能解析!

@RequestMapping(value = "/j3", produces = "application/json;charset=utf-8")
@ResponseBody
public String test3() throws JsonProcessingException {
    User user1 = new User("薯条", 21, "汉子");
    User user2 = new User("汉堡", 21, "汉子");
    User user3 = new User("奶茶", 21, "汉子");
    List<User> list = new ArrayList<>();
    list.add(user1);list.add(user2);list.add(user3);    
    ObjectMapper objectMapper = new ObjectMapper();
    String str = objectMapper.writeValueAsString(list);
    return str;
}

在这里插入图片描述


3.4、日期对象

转为日期对象比较麻烦,Date对象交给ObjectMapper处理之前需要进行一下转化,否则转为Json后前端收到的是一个时间戳,那就需要再次转换了。

  • 第一种:SimpleDateFormat对象将日期格式化,然后将格式化的对象转为json字符串;注意格式化日期大小写字母!

  • 第二种:关闭ObjectMapper将日期转为时间戳再转json字符串,在设置一下ObjectMapper的时间格式。

@RequestMapping(value = "/j4", produces = "application/json;charset=utf-8")
@ResponseBody
public String test4() throws JsonProcessingException {
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");         //设置时间格式
    ObjectMapper objectMapper = new ObjectMapper();
//        objectMapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false);       //关闭转化时间戳
//        objectMapper.setDateFormat(sdf);            //设置时间格式
//        String str = objectMapper.writeValueAsString(date);     //转化json字符串
    String str = objectMapper.writeValueAsString(sdf.format(date));       //直接跳过objectMapper的设置
    return str;
}

在这里插入图片描述



4、乱码问题

乱码问题的原因是因为直接响应并没有走视图解析器、也不走过滤器,因此需要设置编码。可以在每个方法的RequestMapping中加入produces配置响应内容的格式与编码,也可以直接在springmvc配置文件中加入。

<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="failOnUnknownProperties" value="false"/>
                </bean>
            </property>
        </bean>
    </mvc:message-converters>

</mvc:annotation-driven>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值