JSON(JavaScript Object Notation,JS 对象标记)是一种轻量级数据交换格式,采用独立于编程语言的文本格式储存和表示数据,易于机器解析和生成,提升网络传输效率。
任何 JavaScript 支持的数据类型都可以通过 JSON 表示,例如字符串、数字、对象、数组等。
JSON 键值对保存 JavaScript 对象,键:值
对组合中的键名在前用双引号 ""
包裹,值在后,两者使用冒号 :
分隔。
{"name": "弗罗多"}
{"age": "50"}
{"sex": "男"}
JSON 是 JavaScript 对象的字符串表示法,使用文本表示一个 JS 对象,本质是一个字符串。
var obj = {a: 'Hello', "b": 'World'}; // JS 对象
var json = '{"a": "Hello", "b": "World"}'; // JSON 字符串
使用 JSON.stringify() 方法可将 JavaScript 对象转换为JSON字符串。
var json = JSON.stringify({a: 'Hello', b: 'World'});
// json = '{"a": "Hello", "b": "World"}'
使用 JSON.parse() 方法可将 JSON 字符串转换为 JS 对象。
var obj = JSON.parse('{"a": "Hello", "b": "World"}');
// obj = {a: 'Hello', b: 'World'}
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.10.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.10.0version>
dependency>
注意:新导入依赖时发布的lib目录下引入依赖
@RequestMapping
注解 produces
属性解决中文乱码@Controller
public class UserController {
// produces 设置编码格式,解决中文乱码
@RequestMapping(value = "/testResJson", produces = "application/json;charset=utf-8")
// 不被视图解析器解析,返回JSON字符串
@ResponseBody
public String testResJson() throws JsonProcessingException {
User user = new User("弗罗多", 50, "男");
ObjectMapper mapper = new ObjectMapper();
// 将对象转换为 JSON
return mapper.writeValueAsString(user);
}
}
<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>
@Controller
public class UserController {
// produces 设置编码格式,解决乱码
@RequestMapping(value = "/testResJson")
// 不被视图解析器解析,返回字符串
@ResponseBody
public String testResJson() throws JsonProcessingException {
User user = new User("弗罗多", 50, "男");
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(user);
}
@RequestMapping(value = "/testResMoreJson")
@ResponseBody
public String testResMoreJson() throws JsonProcessingException {
List<User> userList = new ArrayList<User>();
User frodo = new User("弗罗多", 50, "男");
User sam = new User("山姆", 50, "男");
User aragon = new User("阿拉贡", 50, "男");
userList.add(frodo);
userList.add(sam);
userList.add(aragon);
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(userList);
}
@RequestMapping("/testResTimeJson")
@ResponseBody
public String testResTimeJson() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
//不使用时间戳的方式
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
//自定义日期格式对象
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:dd:ss");
//指定日期格式
mapper.setDateFormat(simpleDate);
Date date = new Date();
// java 时间格式控制
// String formatDate = simpleDate.format(date);
return mapper.writeValueAsString(date);
}
}
public class JsonUtil {
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;
}
}
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.70version>
dependency>
@RequestMapping(value = "/testFastJson")
@ResponseBody
public String testFastJson() throws JsonProcessingException {
List<User> userList = new ArrayList<User>();
User frodo = new User("弗罗多", 50, "男");
User sam = new User("山姆", 50, "男");
User aragon = new User("阿拉贡", 50, "男");
userList.add(frodo);
userList.add(sam);
userList.add(aragon);
System.out.println("*******Java对象 转 JSON字符串*******");
String str1 = JSON.toJSONString(userList);
System.out.println("JSON.toJSONString(list)==>"+str1);
String str2 = JSON.toJSONString(frodo);
System.out.println("JSON.toJSONString(frodo)==>"+str2);
System.out.println("\n****** JSON字符串 转 Java对象*******");
User jp_user1=JSON.parseObject(str2,User.class);
System.out.println("JSON.parseObject(str2,User.class)==>"+jp_user1);
System.out.println("\n****** Java对象 转 JSON对象 ******");
JSONObject jsonObject1 = (JSONObject) JSON.toJSON(sam);
System.out.println("(JSONObject) JSON.toJSON(sam)==>"+jsonObject1.getString("name"));
System.out.println("\n****** JSON对象 转 Java对象 ******");
User to_java_user = JSON.toJavaObject(jsonObject1, User.class);
System.out.println("JSON.toJavaObject(jsonObject1, User.class)==>"+to_java_user);
return JSON.toJSONString(userList);
}