1.0JAVA后台对JSON数据的处理:
1.1处理JSON对象
后台收到request请求后,经过具体业务处理(此处略)返回一个JSON对象并发送到XMLHttpRequest中,本例生成一个含有 JSON对象以及JSONArray数组的复杂JSON对象,代码如下:
String longStr ="{ 'desc': 'OK', 'status': 1000, 'data': { 'wendu': '20',"
+ " 'ganmao': '相对于今天将会出现大幅度降温,易发生感冒,请注意适当增加衣服,加强自我防护避免感冒。',"
+ " 'forecast': [ { 'fengxiang': '北风', 'fengli': '3-4级', 'high': '高温 27℃', 'type': '中雨', 'low':"
+ " '低温 19℃', 'date': '6日星期五' }, { 'fengxiang': '北风', 'fengli': '微风级', 'high': '高温 23℃', "
+ "'type': '大雨', 'low': '低温 17℃', 'date': '7日星期六' }, { 'fengxiang': '北风', 'fengli': '微风级',"
+ " 'high': '高温 26℃', 'type': '小雨', 'low': '低温 17℃', 'date': '8日星期天' }, { 'fengxiang': '南风',"
+ " 'fengli': '微风级', 'high': '高温 27℃', 'type': '多云', 'low': '低温 15℃', 'date': '9日星期一' }, "
+ "{ 'fengxiang': '南风', 'fengli': '微风级', 'high': '高温 29℃', 'type': '多云', 'low': '低温 16℃', "
+ "'date': '10日星期二' } ], 'yesterday': { 'fl': '微风', 'fx': '北风', 'high': '高温 33℃', 'type': '阴',"
+ " 'low': '低温 22℃', 'date': '5日星期四' }, 'aqi': '58', 'city': '成都' } }";
处理字符串的原则是,如果看到“{”那就一个字符串形式的JSON对象,如果看到“[”就表明是一个JSONArray对象
首先将字符串生成JSON对象:
JSONObject obj = new JSONObject();
obj = JSONObject.fromObject(longStr);
生成的JSON对象其实是由两个键-值对数据以及一个名为data的复杂JSON对象组成的
{ 'desc': 'OK', 'status': 1000, 'data': JSONobject"}
JSON对象的取值:
String valuStr = obj.getString("desc");//取得JSON对象中key为desc的值
取得JSON对象中的JSON对象:
JSONObject dataObj = (JSONObject)obj.get("data");
该对象中又是一个包含JSON对象的集合:
{'wendu': '20', 'ganmao': '相对于今天将会出现大幅度降温,易发生感冒,请注意适当增加衣服,加强自我防护避免感冒。','forecast':JSONArray}
取得JSON对象中的JSONArry对象。调用get方法:
JSONArray jarr = new JSONArray();
JSONObject dataObj = (JSONObject)obj.get("data");//get方法取得JSON对象中的JSON对象
jarr = (JSONArray)dataObj.get("forecast");//从JSON对象中取出key为forecast的JSONArray
JSONArray是一个由JSON对象组成的数组,可以简单的用循环来取得每一个对象
for(int i=0;i<jarr.size();i++){
job = (JSONObject)jarr.get(i);
String s = job.get("date").toString();
System.out.println("fengxiang :"+ job.get("fengxiang"));
System.out.println("fengli :"+ job.get("fengli"));
System.out.println("high :"+ job.get("high"));
System.out.println("type :"+ job.get("type"));
System.out.println("low :"+ job.get("low"));
System.out.println("date :"+ job.get("date"));
}
至此所有JSON对象拆分完毕,可以进行相应操作。
1.2将JSON对象发送至前台
JSONObject obj = new JSONObject();
obj = JSONObject.fromObject(longStr); //将字符串生成JSON对象
response.setContentType("text/html;charset=utf-8"); //防止乱码
response.getWriter().print(obj);
2 JS处理后台的JSON对象
页面通过XMLHttpRequest的responseText取得该JSON对象:
xmlhttp.responseText
该方法处理的JSON对象是上边讲的复杂JSON数组
function doJsong(JSONobj){
//JSONobj 为 xmlhttp.responseText 取得后台返回的JSON对象
var json = eval("("+JSONobj+")"); //调用eval方法生成js的json对象;
var jjson= json.data.forecast; //JSON对象的值或者其中的对象可以简单的通过对象的key取得即JSON对象.KEY
var jsonObj = JSON.parse(JSON.stringify(jjson));//转换为json对象
var jsonstr = JSON.stringify(jsonObj[0]);//转换为字符串,取得JSON对象中的JSONArray
var obj = JSON.parse(jsonstr);//这里转来转去只是测试该方法
var str = "";
for(var p in obj){
str = str+obj[p]+",";
alert(str);
}
}
该笔记仅为本人记录之用,如有不对,请指点,在此感谢。