java JSON转化为对象的例子

本文介绍了一种将JavaScript对象转换为JSON格式的方法,并通过一个具体的OrderInfo对象实例展示了如何使用Ajax将其提交到服务器端。服务器端则利用Java进行JSON解析并转化为对应的Java对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

应用场景:把js的object转化为json格式,以便提交该js对象
然后由服务端把js对象(json格式)进行一定的处理.

举例:下面一个ajax提交js object到服务器[服务器使用java将json转化为实例对象]的例子

客户端:
/**将javascript object转化为json格式数据的方法**/
function  _ToJSON(o){
//.....具体方法在文章最后
}
/**一个复杂的js类**/
OrderInfo=new function(){
this.totalprice=0;
this.orderDate="2012-12-21";
this.message="";
this.products=new Array();//订购的商品列表
}
/**定义上面js类的一个对象**/
var order=new OrderInfo();
var p1=new Product(........);//一个商品
var p2=new Product(........);//另一个商品
order.push(p1);
order.push(p2);
order.totalprice='123.00';
//ok,order对象现在应该足够复杂了

/**下面用ajax的方式来提交它(jquery)**/
$.ajax({
url: '/cart/order.action',
type: 'POST',
data:{jsonData:escape( _ToJSON(order))},    //jsonData为此次post提交时,提交的参数,你可自定义其名称
dataType:"json",
timeout: 10000,
error: function(){alert('Error posting data');},
success: function(result){
alert('订单保存成功'+result);
}//function
});
注意:上面的代码,因考试到json中有中文或其他特殊字符,对json格式进行了escape编码(要求后台接收此参数后进行unescape操作)


服务端
使用json-lib.jar,里面提供了一些类,可以将json字符将化为java对象
String escaped_json=request.getParameter("jsonData");//获取提交的参数值,jsonData与上面红体字的jsonData相对应
String json=UtilTool.unescape(escaped_json);//将得到的json,进行unescape解析,(UtilTool是我自定义的类)
JSONObject jsonObject = JSONObject.fromObject(json);
Map<String, Class> m = new HashMap<String, Class>();
m.put("products", Product.class);//"products"与js object里的products对应,Product.class类的字段与客户端new Product(........);具有相同的数据结构
Order o=(Order)JSONObject.toBean(jsonObject, OrderInfo.class, m);
这样前台提交的orderinfo对象,就转化成了java里的Order对象,当然前题是:前后端对象的数据结构要一致
<!---over---->

 

/**修改后的用于js对象序列化的方法**/
function _ToJSON(o){
if(o == null)
return "null";

switch(o.constructor) {
case String:
var s = o; // .encodeURI();
if(s.indexOf("}")<0)s = '"' + s.replace(/(["\\])/g, '\\$1') + '"';
s = s.replace(/\n/g,"\\n");
s = s.replace(/\r/g,"\\r");
return s;
case Array:
var v = [];
for(var i=0; i<o.length; i++)
v.push(_ToJSON(o[i])) ;
if(v.length<=0)return "\"\"";
return "" + v.join(",") + "";
case Number:
return isFinite(o) ? o.toString() : _ToJSON(null);
case Boolean:
return o.toString();
case Date:
var d = new Object();
d.__type = "System.DateTime";
d.Year = o.getUTCFullYear();
d.Month = o.getUTCMonth() +1;
d.Day = o.getUTCDate();
d.Hour = o.getUTCHours();
d.Minute = o.getUTCMinutes();
d.Second = o.getUTCSeconds();
d.Millisecond = o.getUTCMilliseconds();
d.TimezoneOffset = o.getTimezoneOffset();
return _ToJSON(d);
default:
if(o["toJSON"] != null && typeof o["toJSON"] == "function")
return o.toJSON();
if(typeof o == "object") {
var v=[];
for(attr in o) {
if(typeof o[attr] != "function")
v.push('"' + attr + '": ' + _ToJSON(o[attr]));
}

if(v.length>0)
return "{" + v.join(",") + "}";
else
return "{}";       
}
alert(o.toString());
return o.toString();
}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值