这段时间学习json交互,懂得了不少东西,其中碰到不少问题,最后都一一解决了。今天下班恰好有时间,总结一篇关于Java web中利用json进行前后台交互的文章,把自己的总结和近日在网上搜到的资料一一奉上。
一JSON简介及用途
Json是继XML后另一种流行的交互格式,json只是一个数据格式,而且结构非常简单,如今流行程度已经超过XML,成为最普遍的交互格式。
我自己通俗理解,如果一个场景具备以下三点,就应该使用json作为交互格式1、数据量较小 2、端与端之间的交互 3、结构化数据。首先数据量越大,json的解析逻辑也复杂起来,这时就不适用;然后是端与端,比如server与安卓客户端、server与浏览器间通信;最后是结构化,就是简单的数据,比如数值,布尔值,字符串。连起来就是端与端,进行小量简单数据交换,就用json。其实传大量数据或图片语音的交互能占多少呢,大部分就是这种小数据交互,比如聊天工具,产生绝大部分的内容都是小段文本。
我是从IBM网站的介绍初步认识json的,讲的恨透彻。IBM JSON入门指南,还有json的官网介绍 http://www.json.org/json-zh.html,两篇文章把JSON的数据结构和“JSON”是什么讲的很清楚,个人更喜欢IBM那篇,因为它还介绍了怎么实现(Java对象转为json字符串)。
------------------------------------------分割线:强烈建议看懂以上两篇文章再往下-----------------------------
二实际应用
{"name":"xcj","age":22}
{name:"xcj",age:22} //不严格的写法
一:前台接收
var person={"name":"xcj","age":22} //直接定义person引用json
person.name="xcj2" //修改内容</span>
<span style="font-size:14px;">var person=eval("("+jsonString+")"); //jsonString为接收到的字串</span>
这样也能达到目的,因为json刚开始就是为javascript所设计的,所以js处理json实在方便
二:前端发送json
<span style="font-size:14px;">var person={};
person.name="xcj";
person.age=22;</span>
该js等同上面的json。现在将该js转换为json字符串,传到Java后台,js转成json需要使用json2.js(也有很多其他js插件、Ajax框架可以做到,这里使用json官方的json2.js)。注意不是json.js,那是旧版,而且搜索出来的资源少。当时我浪费了很多时间,后来搜json2.js马上ok。
//1、JSON.stringify()
var jsonString=JSON.stringify(person);
//2、toJSONString()方法。
var jsonString=person.toJSONString();
/*然后将字符串传到后台即可。json2.js还提供了JSON.parse()方法和parseJSON,用于将json字符串转换为js对象*/
//1、JSON.parse()
var person=JSON.parse(personstr);
//2、parseJSON
var person=personstr.parseJSON();
疑问与理解要点:
/*传统通过Object*/
var obj1=new Object();
obj1.age=22;
//传统通过构造函数
function person(name,age){
this.name=name;
this.age=age;
}
var obj2=new person(myname,myage);
//从javascript1.2开始,可以通过json语法构造,这种简单很多
var person={name:myname,age:myage}
//数组传统构造如下
var pa=new Array();
pa[0]=new person('xcj',22);
pa[1]=new person('sicong',23);
//引入json语法后新构造如下
var pa=[{name:'xcj',age:22},{name:'sicong',age:23}]
三、java后台接收
JSONArray jsonarr=new JSONArray(jsonstr);//转换为json数组
for(int i=0;i< jsonarr.length();i++){
//输出数组第i个json对象,key为name的值
System.out.print(jsonarr.getJSONObject(i).get("name"));
System.out.print(jsonarr.getJSONObject(i).get("age"));
}
结果(空格为手添):
xcj 22 sicong 25
四、java生成json字符串发送
<pre name="code" class="java">//1、集合转为数组,数组再转为字符串
JSONArray array = JSONArray.fromObject(personlist);
String jsonstr = array.toString();
//2.java对象转为json对象,再转为字符串
JSONObject object = JSONObject.fromObject(person1);
String jsonstr=object.toString();