前言
- JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格局,目前应用特地宽泛。
- 采纳齐全独立于编程语言的文本格式来存储和示意数据。
- 简洁和清晰的层次结构使得 JSON 成为现实的数据交换语言。
- 易于人浏览和编写,同时也易于机器解析和生成,并无效地晋升网络传输效率。
在 JavaScript 语言中,一切都是对象。因而,任何JavaScript 反对的类型都能够通过 JSON 来示意,例如字符串、数字、对象、数组等。看看他的要求和语法格局:
- 对象示意为键值对,数据由逗号分隔
- 花括号保留对象
- 方括号保留数组
JSON 键值对是用来保留 JavaScript 对象的一种形式,和 JavaScript 对象的写法也大同小异,键/值对组合中的键名写在后面并用双引号 “” 包裹,应用冒号 : 分隔,而后紧接着值:
{"name": "xiaotang"}{"age": "18"}{"sex": "男"}
很多人搞不清楚 JSON 和 JavaScript 对象的关系,甚至连谁是谁都不分明。其实,能够这么了解:
JSON 是 JavaScript 对象的字符串表示法,它应用文本示意一个 JS 对象的信息,实质是一个字符串。
var obj = {a: 'Hello', b: 'World'}; //这是一个对象,留神键名也是能够应用引号包裹的var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,实质是一个字符串
JSON 和 JavaScript 对象互转
要实现从JSON字符串转换为JavaScript 对象,应用 JSON.parse() 办法:
var obj = JSON.parse('{"a": "Hello", "b": "World"}');//后果是 {a: 'Hello', b: 'World'}
要实现从JavaScript 对象转换为JSON字符串,应用 JSON.stringify() 办法:
var json = JSON.stringify({a: 'Hello', b: 'World'});//后果是 '{"a": "Hello", "b": "World"}'
测试案例
前端界面显示JSON数据
**1.新建一个springboot我的项目
2.在模本引擎目录先新建个 json-1.html , 编写测试内容**
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><script type="text/javascript"> //编写一个js的对象 var user = { name:"殷飞龙", age:3, sex:"男" }; //将js对象转换成json字符串 var str = JSON.stringify(user); console.log(str); //将json字符串转换为js对象 var user2 = JSON.parse(str); console.log(user2.age,user2.name,user2.sex);</script></body></html>
3.在IDEA中应用浏览器关上,查看控制台输入!
管制层Controller返回JSON数据:
Jackson应该是目前比拟好的json解析工具了
当然工具不止这一个,比方还有阿里巴巴的 fastjson 等等。
咱们这里应用Jackson,应用它须要导入它的jar包;
SpringBoot不必引入依赖会显示无奈关上tomacat 次要问题jar包抵触
这里咱们须要两个新货色,一个是@ResponseBody,一个是ObjectMapper对象,咱们看下具体的用法
1.编写一个User的实体类,而后咱们去编写咱们的测试Controller;
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 + '\'' + '}'; }}
2.编写一个Controller
import com.example.demojson.pojo.User;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;@Controller //启动能够扫描的到Controller的注解类public class UserController { @RequestMapping("/json1") @ResponseBody public String json1() throws JsonProcessingException { //创立一个jackson的对象映射器,用来解析数据 ObjectMapper mapper = new ObjectMapper(); //创立一个对象 User user = new User("殷飞龙", 18, "男"); //将咱们的对象解析成为json格局 String str = mapper.writeValueAsString(user); //因为@ResponseBody注解,这里会将str转成json格局返回;非常不便 return str; }}
3.输入后果:
返回json字符串对立解决
在类上间接应用 @RestController ,这样子,外面所有的办法都只会返回 json 字符串了,不必再每一个都增加@ResponseBody !咱们在前后端拆散开发中,个别都应用 @RestController ,非常便捷。
测试汇合输入
@RequestMapping("/json2")public String json2() throws JsonProcessingException { //创立一个jackson的对象映射器,用来解析数据 ObjectMapper mapper = new ObjectMapper(); //创立一个对象 User user1 = new User("殷飞龙1号", 18, "男"); User user2 = new User("殷飞龙2号", 18, "男"); User user3 = new User("殷飞龙3号", 19, "男"); User user4 = new User("殷飞龙4号", 20, "男"); List<User> list = new ArrayList<User>(); list.add(user1); list.add(user2); list.add(user3); list.add(user4); //将咱们的对象解析成为json格局 String str = mapper.writeValueAsString(list); return str;}
输入工夫对象
//输入工夫对象@RequestMapping("/json3")public String json3() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); //创立工夫一个对象,java.util.Date Date date = new Date(); //将咱们的对象解析成为json格局 String str = mapper.writeValueAsString(date); return str;}
输入后果:
- 显示的数字的具体信息
- 默认日期格局会变成一个数字,是1970年1月1日到以后日期的毫秒数!
- Jackson 默认是会把工夫转成timestamps模式
解决方案:勾销timestamps模式 , 自定义工夫格局
@RequestMapping("/json4") @ResponseBody public String json4() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); //不应用工夫戳的形式 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); //自定义日期格局对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //指定日期格局 mapper.setDateFormat(sdf); Date date = new Date(); String str = mapper.writeValueAsString(date); return str; }
工夫显示胜利
抽取为工具类
创立一个util包外面寄存一些工具类,缩小代码的复杂度、反复度
package com.example.demojson.utils;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature;import java.text.SimpleDateFormat;public class JsonUtils { public static String getJson(Object object) { return getJson(object,"yyyy-MM-dd HH:mm:ss"); } public static String getJson(Object object,String dateFormat) { ObjectMapper mapper = new ObjectMapper(); //不应用时间差的形式 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); //自定义日期格局对象 SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); //指定日期格局 mapper.setDateFormat(sdf); try { return mapper.writeValueAsString(object); } catch (JsonProcessingException e) { e.printStackTrace(); } return null; }}
测试代码: 一样的成果极大的简化
@RequestMapping("/json5")@ResponseBodypublic String json5() throws JsonProcessingException { Date date = new Date(); String json = JsonUtils.getJson(date); return json;}
输入后果:
最初
大家看完有什么不懂的能够在下方留言探讨,也能够关注我私信问我,我看到后都会答复的。也欢送大家关注我的公众号:前程有光,马上金九银十跳槽面试季,整顿了1000多道将近500多页pdf文档的Java面试题材料放在外面,助你圆梦BAT!文章都会在外面更新,整顿的材料也会放在外面。谢谢你的观看,感觉文章对你有帮忙的话记得关注我点个赞反对一下!