您的位置:首页 > 编程语言 > Java开发

【问题-java-json】josn的发送与接收(全)解析json对象与字符串在js中的区别,以及后端spring该如何接收?

2016-07-17 13:37 1796 查看
之前我自己整的时候,从网上扒了各种资料,发现还是挺杂乱的(目前比较菜,只会用百度。。。),于是我整了一下这条主线,比较垂直,但是可以直接用。

长篇励志好文

(算是第一篇标原创的)

↓↓↓

引言:前端发出数据后,如果后端你想要用@RequestBody来解析成对象,那么你先要确定你发过来的数据是一个"json字符串",而不是表单数据或者对象啥的。

如下图区别:



此处为表单数据



此处为正统json字符串

用控制台看,明显颜色都不一样。

下面来解释一下该原理。

一、前端部分

前端代码示例:

<js>

//声明json对象

var
param = new Object();

param.zain
= "zain";

param.code
= "java";

param.love
= "code";

var
data = "这是一个json字符串";

var
_param = {"param":param,"data":data};

//发送ajax请求

$.ajax({    //方法头

    type:
"post",    //请求方式,get方式也可

 
  url: "http://www.zain.com/json/json.action",    //请求地址

 
  data:JSON.stringify(_param),   //要发送的数据的json字符串

 
  dataType: "json",    //数据类型为json

    contentType:"application/json",

//连接格式为json

 
  success: function(data){    //data为后台传回来的数据

        //执行成功之后的方法

    },

    error:
function() {

        //执行失败之后的方法

    }

});

</js>

流程解析:

1.首先是我在js中声明了一个对象,之后向这个对象中塞入各种属性,形成param,data是随便写的一个字符串。

2.之后通过json组合,将param和data都塞进了json对象中形成_param,最后在data中转换发送数据格式,JSON.stringify为将json对象转换为json字符串。

3.连接格式修改成application/json它,不使用默认的application/x-www-form-urlencoded 。

4.这样就愉快的发了一串json字符串过去,同时@RequestBody这个注解也可以解析他了。解析形式也是通过自己声明的javabean(实体类)来解析。

前端json解析:

1.关于如何直接声明json对象与json字符串:

JSON对象:

var jsonObj = { "name": "cxh", "sex": "man" };

JSON字符串:

var jsonStr = '{ "name": "cxh", "sex": "man" }';

其中的区别起始就是两边有木有引号...我目前还是喜欢先对象后转串,大家可以尝试直接json字符串试试,看往里塞东西时,有木有啥限制。

注:json除了对象格式外,其实还有个数据格式,此处不做解析,以后会补充滴。不得不说数组模式也蛮常用的,做前端的话,会经常看到很多.json格式的文件,其中传输的就是josn数组或数组格式的字符串。

2.js里关于json对象与字符串的转换函数

//将JSON字符串转换为JSON对象

var
jsonObj1 = jsonStr.parseJSON();

var
jsonObj2 = JSON.parse(jsonStr);

//将JSON对象转化为JSON字符串

var
jsonStr1=jsonObj.toJSONString();

var
jsonStr2=JSON.stringify(jsonObj);

二、后端部分

当你愉快如例图所示,发送过来一个json字符串之后,并且你还使用了java对象来接收,没有报错,那么恭喜你,已经成功了第一步,对于简单的json字符串格式已经可以随便拿来用来。

but

如果你也像我一样作死,接收这种复杂格式的json字符串的话,就有活干了!因为对于json内部的之前我塞的json对象而言,无法完美兼容java对象,即无法使用直接转换或强转,需要进一步处理。

当然方法很多啦,我找到了一个歪招,还挺好用的。

我在调试的时候发现老是报HashMap不能转为java对象的错,于是我用Obj强转之后toString了以下发现,里面存的是个Map格式的字符串。。。于是我打开了百度,搜索 String转Map,然后发现了奇迹。。。

神奇方法:

JSONObject
 jasonObject = JSONObject.fromObject(str);

Map
map = (Map)jasonObject;

上大图解析



解析:

如图所示,jsonObj是可以直接强转为Map的,所以此处可以直接暴力强转,虽然说接收的玩意是个对象,但是里面存的是json字符串,变相的解析了其中的字符串。

其他格式暴力转类同:

1. List

JSONArray jsonArray = JSONArray.fromObject( list );

2. Map

JSONObject jsonObj = JSONObject.fromObject(map);

3. Bean

JSONObject jsonObj = JSONObject.fromObject(new JsonBean());

4. 数组

JSONArray jsonArray = JSONArray.fromObject(myArray);

5. 字符串

JSONArray jsonArray = JSONArray.fromObject("['zain','is','good']" );

- 完美结束 -

以后有了json可以各种啪啪啪

的敲代码了

关于我为啥不用好看的样式。。。

表示太费时间了,目前承担不起。。。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  json spring java