目录
JSON字符串转化为JS对象,使用JSON.parse()方法
JS字符串转化为JSON对象,使用JSON.stringify()方法
JSON的要求和语法格式:
- 对象表示为键值对
- 数据由逗号分割,最后一组数据没有逗号
- 花括号{}保存对象
- 方括号[]保存数组
{"name":"秦江","age":3,"sex":"男"}
JSON键值对是用来保存JS对象的一种方式,和JS对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 ""包裹,使用冒号;分割。然后紧接着值:
{"name":"秦江"}
{"age":3}
{"sex":"男"}
JSON和JS对象相互转换
JSON字符串转化为JS对象,使用JSON.parse()方法
var obj = JSON.parse('{"a":"hello","b":"Word"}'); //结果为 {a:'Hello',b:'Word'}
JS字符串转化为JSON对象,使用JSON.stringify()方法
var obj = JSON.stringify(a:'Hello',b:'Word'); //结果为 '{"a":"hello","b":,"Word"}'
JSON 返回字符串
1、引入jar包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
2、使用@ResponseBody
使用位置在方法的上面
@ResponseBody,将服务器端返回的对象转换为对json对象响应回去;
3、需要一个jackson的对象映射器,就是一个类,使用它可以直接将对象转换为json字符串;
ObjectMapper mapper = new ObjectMapper();
案例:
@RequestMapping(value = "/json1")
@ResponseBody
public String json1() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
User user = new User("秦疆1号", 1, "男");
// 将Java对象转换为json字符串;
String str = mapper.writeValueAsString(user);
return str;
}
发现问题:
会有乱码问题
解决方案:
1、通过@RequestMaping的produces属性来实现
@RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")
2、xml中配置
<mvc:annotation-driven>
<!--JSON格式化乱码处理-->
<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>
JSON处理时间Date
//1.如何让他不返回时间戳!所以我们要关闭他的时间功能
mapper.configure(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, false);
//2.时间格式化问题!自定义时间格式对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//3.让mapper指定时间日期格式为
mapper.setDateFormat(sdf);
案例:
@RequestMapping(value = "/time2")
@ResponseBody
public String time2() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
//1.如何让他不返回时间戳!所以我们要关闭他的时间功能
mapper.configure(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, false);
//2.时间格式化问题!自定义时间格式对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//3.让mapper指定时间日期格式为
mapper.setDateFormat(sdf);
//写一个日期时间的类
Date date = new Date();
return mapper.writeValueAsString(date);
}
封装成工具类
public class JsonUtils {
/**
* 默认时间格式 yyyy-MM-dd HH:mm:ss
* @param object
* @return
*/
public static String getJson(Object object){
return getJson(object, "yyyy-MM-dd HH:mm:ss");
}
/**
* 自己定义时间格式
* @param object
* @param dateFormat
* @return
*/
public static String getJson(Object object,String dateFormat){
ObjectMapper mapper = new ObjectMapper();
//1.如何让他不返回时间戳!所以我们要关闭他的时间功能
mapper.configure(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, false);
//2.时间格式化问题!自定义时间格式对象
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
//3.让mapper指定时间日期格式为
mapper.setDateFormat(sdf);
try {
return mapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
}
个人观点,有不足之处,请大家多批评改正