什么是JSON
JSON (JavaScript Object Notation) ,它其实就是数据的一种表示方式,其实就是字符串(高逼格说叫:文本格式),例如:
{
"name" : "张三",
"age" : 18,
"sex" : "男",
"book" : {
"bname" : "好好学java",
"price" : 25.6
},
"hobbies":[
{
"hobby" : "唱"
},
{
"hobby" : "跳"
},
{
"hobby" : "rap"
},
{
"hobby" : "篮球"
}
]
}
JSON和JavaScript对象的关系
可以这么理解:
JSON是JavaScript的字符串表示,它使用文本表示JS的信息,本质上,JSON是一个字符串
var jsObj = {name : '张三', sex : '男'}; //这是javaScript对象
var json = '{"name" : "张三", "sex" : "男"}'; //这是json字符串
关于JSON与JavaScript的互相转化:
JSON->JavaScript(使用JavaScript内嵌的JSON.parse()方法)
//方法的参数为json字符串,返回值是JavaScript对象
jsObj = JSON.parse(json);
JavaScript->JSON(使用JavaScript内嵌的JSON.stringify()方法)
//方法的参数为JavaScript对象,返回值为JSON字符串
json = JSON.stringify(jsObj);
前端如何传递JSON给后端(前端->后端)
使用AJAX方法最为快捷:Ajax初体验
在SpringMVC中,如何让后端返回给前端JSON(后端->前端)
- 导入jackson的依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
- 写一个Controller
[注]:这里在@RequestMapping中设置了一个属性值:
produces = “application/json;charset=utf-8”
这样做是为了防止JSON解析时出现乱码问题。
@Controller
public class JSONController{
@RequestMapping(value = "/j1",produces = "application/json;charset=utf-8")
@Responsebody//它就不会走视图解析器,会直接返回一个字符串
public String json1() throws JsonProcessingException{
//Jackson ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//创建一个对象(id,姓名,年龄)
User user = new User(2010001,"张三",18);
//将对象转换为JSON字符串
String str = mapper.writeValueAsString(user):
return str;
}
}
其实,还有一种方法,来防止JSON出现乱码,即在SpringMVC配置文件中配置如下内容(这里用到了JackSon):
<!--解决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>
当给某一个类加上@RestController时,则代表该注解类下的所有方法都不经过视图解析器,只返回字符串
@RestController
public class StringController{
//...
}
另外,还可以使用阿里巴巴开发的fastjson工具包…