json格式字符串和json对象的区别和应用场景?

2,210 阅读4分钟

区别?

js

  1. 如果是字符串,就是有双引号。只不过字符串内容是json格式的字符串,但是本质仍然是字符串。和其他字符串的区别,主要是json格式字符串有一定的格式,方便被转换为json对象。这也是json格式字符串的主要作用,就是为了方便和json对象互相转换。
  2. 如果是json对象,其实就是一个js对象,json对象也是js对象的一种。语法区别就是,json对象是没有双引号的,并且,可以用.访问json对象的字段。

java

  1. 如果是字符串,就是有双引号。这个和上面js介绍的基本上一样。
  2. 如果是json对象,其实就是一个java对象,本质是一个自定义对象(比如,阿里fastjson的JSONObject)。比如,我们最常用的应用场景是,打印日志的时候用阿里fastjson来打印对象数据。主要作用其实也是方便json格式字符串和对象转换。

总结

  1. json格式字符串

是为了方便通信,即前端和后台代码,通信的数据格式一般情况都是字符串。有的情况是需要json格式的字符串更方便,主要是为了把json格式字符串转换为json对象,所以就有了json格式的字符串。

  1. json对象

json对象的目的是为了方便获取对象的字段,不管是js json对象,还是java里的json对象(比如fastjson的JSONObject)。

  1. 最终的本质,其实就是两个关键字

1)通信

前后端通信是用字符串,而用json格式字符串的目的是方便转换为json对象——json对象的目的又是为了方便读对象的字段。

2)方便读数据

json对象的目的是为了方便获取对象的字段。

应用场景

jquery post,需要注意以下几个点。

是异步请求

为什么是异步请求?

就是请求之后,无需等待服务器返回数据,js继续往后执行。

那异步请求怎么获取数据?

通过回调方法。

本质和ajax一样,只不过ajax多了一个入参-请求类型(get/post)

jquery post,只是更加简化了jquery ajax的写法,相当于约定大于配置。

js的代码没有智能提示,根本不知道哪个方法传哪个入参。

入参和入参类型

  1. 入参

大部分时候都是json对象,即{key1:value1, key2:value2}。

  1. 入参类型

后面还会根据入参类型,再转换一下,然后才发送到服务器。

contentType:发送POST请求的格式,默认值为

'application/x-www-form-urlencoded; charset=UTF-8' //这个表示是以键值对的形式提交表单数据,然后发送到服务器,一般都是用这个默认的,后端控制器有对象接收各个字段的值

,也可以指定为

text/plain

application/json //这个表示以json格式字符串的形式发送到后端,如果是这种情况,后端控制器入参就要标明是json格式字符串,然后才好把前端传过来的json格式字符串转换为对象。

出参和出参类型

  1. 出参

回调方法的入参,就是服务器的返回数据(即出参)。

  1. 出参格式

dataType:接收的数据格式,可以指定为

'html'

'xml'

'json' //一般都是用json,所以做好显式的写json

'text'

等,缺省情况下根据响应的

Content-Type

猜测。


最佳实践:一般都是用json,所以做好显式的写json,这样就不需要手动去再把json格式字符串转换为json对象了。


实际例子:下面截图就是因为显式写了json,出参的json格式字符串就自动转换为json对象了


如果没有显式写json,就要手动转换一下。有下面几种方法:

1、Javascript支持的转换方式:

eval(’(’ + jsonstr + ‘)’); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号

注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式。

2、JSON官方的转换方式:

www.json.org/提供了一个json.j…

JSON.parse(jsonstr); //可以将json字符串转换成json对象

JSON.stringify(jsonobj); //可以将json对象转换成json对符串

3、jQuery插件支持的转换方式:

示例:

$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象

后端java代码,如何返回json格式字符串给前端?

用servlet原生的api-HttpServletResponse

  1. 用fastjson先把对象转换为json格式字符串
super.responseMessage(response, JSONObject.toJSONString(对象));
  1. 写数据到前端的浏览器
protected void responseMessage(HttpServletResponse response, String message//json格式字符串)
  throws IOException {
 response.setCharacterEncoding("UTF-8");
 PrintWriter out = response.getWriter();
 out.write(message);
}

用spring注解

本质和上面的方法一样,只不过注解帮你把对象转换为json格式字符串的工作给偷偷的做了。

参考

www.liaoxuefeng.com/wiki/102291…

www.liaoxuefeng.com/wiki/102291…

HTTP content-type www.runoob.com/http/http-c…

www.runoob.com/jquery/ajax…