json格式的数据广泛应用于异步请求中前后端的数据交互,本文主要介绍几种使用场景和使用方法。

一,json格式字符串

<input type="button" id="testBtn" value="测试按钮" onclick="sentAjax();"/><br>
<script type="text/javascript">
function sentAjax(){
$.ajax({
type: 'POST',
url:"<%=basePath%>/manage/test/ajax",
dataType : "json",
success: function(result){
        //这里result是一个符合json格式的js对象
//alert(result.name);
//alert(result[0].name);
//alert(result.listUser[0].name); }
});
}
</script>

java代码

@RequestMapping(value = "/ajax")
public void testAjax(HttpServletRequest request, HttpServletResponse response){ try {
String jsonStr1 = "{\"name\":\"张三\",\"age\":23}";
String jsonStr2 = "[{\"name\":\"张三\",\"age\":1},{\"name\":\"李四\",\"age\":24}]";
String jsonStr3 = "{\"listUser\": [{\"name\":\"张三\",\"age\":1},{\"name\":\"李四\",\"age\":24}] }";
response.setCharacterEncoding("utf-8");//响应字符集的编码格式
response.getWriter().print(jsonStr3);
} catch (IOException e) {
e.printStackTrace();
} }

另外使用spring的@ResponseBody这个注解的话还可以这样写

  @RequestMapping("/ajax")
@ResponseBody
public Object testAjax1(HttpServletRequest request, HttpServletResponse response){ String jsonStr1 = "{\"name\":\"张三\",\"age\":23}";
String jsonStr2 = "[{\"name\":\"张三\",\"age\":1},{\"name\":\"李四\",\"age\":24}]";
String jsonStr3 = "{\"listUser\": [{\"name\":\"张三\",\"age\":1},{\"name\":\"李四\",\"age\":24}] }"; return jsonStr1; }

二,java对象

@RequestMapping(value = "/ajax")
public void testAjax2(HttpServletRequest request, HttpServletResponse response){ try {
User user = new User();
user.setName("张三");
user.setAge(23);
JSONObject jsonObject = JSONObject.fromObject(user);
response.setCharacterEncoding("utf-8");//响应字符集的编码格式
response.getWriter().print(jsonObject.toString());
} catch (IOException e) {
e.printStackTrace();
} }

使用以上的方式的话要先把java对象转换成json格式的字符串。

下面使用springmvc的@ResponseBody这个注解,也是在springmvc的web项目开发中经常用到的。

    @RequestMapping(value = "/ajax")
@ResponseBody
public Object testAjax3(HttpServletRequest request, HttpServletResponse response){
User user = new User();
user.setName("张三");
user.setAge(23);
return user;
}

在这里@ResponseBody这个注解对于json格式数据的解析用到了jackson这个框架另外它对响应对象response进行了封装,这让我们在异步请求中使用json格式的数据进行数据交互更加的方便。它的实现原理如下:

@RequestMapping(value = "/ajax4")
public void testAjax4(HttpServletRequest request, HttpServletResponse response){ try {
User user = new User();
user.setName("张三");
user.setAge(23);
ObjectMapper mapper = new ObjectMapper();
String userStr = mapper.writeValueAsString(user);
response.setCharacterEncoding("utf-8");//响应字符集的编码格式
response.getWriter().print(userStr);
} catch (IOException e) {
e.printStackTrace();
} }

另外在使用json格式数据交互时如有以下用法:

@RequestMapping(value = "/ajax5")
@ResponseBody
public Object testAjax5(HttpServletRequest request, HttpServletResponse response){ Map<String,Object> jsonMap = new HashMap();
String jsonStr1 = "{\"name\":\"张三\",\"age\":23}";
jsonMap.put("json", jsonStr1); return jsonMap; }

前段应该这样写:

<script type="text/javascript">
function sentAjax(){
$.ajax({
type: 'POST',
url:"<%=basePath%>/manage/test/ajax5",
dataType : "json",
success: function(result){
     //result.json取到的只是map在前端转换成json格式js对象时key为'json'对应的字符串的值,在前段json格式的字符串转换成json格式js对象推荐使用 JSON.parse()这个函数。
var jsonStr = JSON.parse(result.json);
alert(jsonStr.name)
}
});
}
</script>

最后说一点,我们作为程序员,研究问题还是要仔细深入一点的。当你对原理了解的有够透彻,开发起来也就得心应手了,很多开发中的问题和疑惑也就迎刃而解了,而且在面对其他问题的时候也可做到触类旁通。当然在开发中没有太多的时间让你去研究原理,开发中要以实现功能为前提,可等项目上线的后,你有大把的时间或者空余的时间,你大可去刨根问底,深入的去研究一项技术,为觉得这对一名程序员的成长是很重要的事情。

最新文章

  1. PAT
  2. 166. Fraction to Recurring Decimal -- 将除法的商表示成字符串(循环节用括号表示)
  3. mac多版本python安装 pymysql
  4. 酷派8150S(移动定制版)可用的第三方Recovery备份数据、刷机并精简系统内置APK经验
  5. 解析mysql索引
  6. 在keil中使用Astyle格式化你的代码的方法
  7. JAVA 可视化分析工具 第12节
  8. 解读java同步类CountDownLatch
  9. unity项目build成webgl时选择生成目录(解决方法)
  10. 计算机网路中CDP,LLDP,STP的详解
  11. Java - 35 Java 实例
  12. grpc &amp; pb 环境配置
  13. Qt编译好的oracle驱动下载
  14. 【剑指offer】替换空格
  15. 从接口取到的JSON数据如何导入进本地SQL数据库
  16. Codeforces Beta Round #9 (Div. 2 Only) A. Die Roll 水题
  17. mount 和 umount 命令
  18. sparkSQL整体实现框架
  19. iOS客户端打包自动集成weex方案
  20. AXI协议(一)

热门文章

  1. 九度OJ题目1003:A+B
  2. Problem : 1012 ( u Calculate e )
  3. 颜色的RGB值表示法
  4. C#将.spl剥离成.emf文件格式
  5. java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListene解决办法
  6. 【Linux】 linux中的进程信息相关的一些内容
  7. Redis这些知识点,是必须知道的!
  8. 使用selenium时提示:ImportError:No module named selenium
  9. Java中HashMap底层实现原理(JDK1.8)源码分析
  10. Vue项目使用CDN优化首屏加载