表示名称 / 值对
按照最简单的形式,可以用下面这样的 JSON 表示 "名称 / 值对" : { "firstName": "Brett" }这个示例非常基本,而且实际上比等效的纯文本 "名称 / 值对" 占用更多的空间:firstName=Brett
但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的 记录,比如:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }
从语法方面来看,这与"名称 / 值对"相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。
表示数组
当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的 名称 / 值 对(就像在本系列前面文章中看到的那种名称 / 值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName这样的形式。{ "people": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
/**
* list转换成JSONArray,传入的list集合可以是任何类型的。
*
* @param list
* :传入的list可以是任何类型的集合,集合类型的实体类也能传入
* @return JSONArray
*/
public static <T> JSONArray listToJson(List<T> list) {
JSONArray ja = JSONArray.fromObject(list);
return ja;
}
(2)、实体类转JSON
/**
* 实体类转换成JSON
*
* @param t
* 实体类
* @return JSONObject
*/
public static <T> JSONObject beanToJson(T t) {
JSONObject jsonObject = JSONObject.fromObject(t);
return jsonObject;
}
(3)Map转JSON
/**
* Map 转换成Json
*
* @param map
* @return JSONObject
*/
public static JSONObject mapToJson(Map<String, Object> map) {
JSONObject json = JSONObject.fromObject(map);
return json;
}
function jsonTest(){
/*1、dataType : 'json',将后台获取的json格式字符串转换成了json格式数据,因此前台不需要再做转换 ,直接data.key就可以得到相应的value
2、通过ajax回调的方法一定不能是放回一个jsp,小白之前办过这么蠢的事,返回了一个jsp页面结果就是获取不到任何值也不报任何错误。
3、
*/
debugger;
jQuery.ajax({
url:'<%=request.getContextPath()%>/javalearn/json',
method : 'POST',
dataType : 'json',
success : function(data) {
alert(data.message);
}
});
}
后台代码:
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import net.sf.json.JSONObject;
/**
* 后台json学习代码
* 知识点
* 1、后台List,实体类、Map转Json格式,参考文章前几节
* 2、@RequestMapping(value = "/json", produces = "application/json;charset=utf-8")
* 注解中解决后台向前台传值中文乱码 ,方法返回的是json格式的字符串,如果返回的是个jsp页面则需要在方法中添加 resp.setContentType("text/html;charset=utf-8");代码即可。
* @author lyd
*
*/
@Controller
@RequestMapping(value = "/javalearn")
public class JavaLearnController {
/**
*
* @param req
* @param resp
* @return json格式的字符串
*/
@RequestMapping(value = "/json", produces = "application/json;charset=utf-8")
@ResponseBody
public String jsonLearn(HttpServletRequest req, HttpServletResponse resp) {
// resp.setContentType("text/html;charset=utf-8");
Map<String, Object> map = new HashMap<String, Object>();
map.put("success", true);
map.put("message", "操作成功!");
JSONObject jsonObject = JSONObject.fromObject(map);
return jsonObject.toString();
}
}
运行结果: