jsonの解析について

17815 ワード

jsonはjavawebでデータを転送するのに良いツールで、パッケージされたデータは一歩はっきりしています.
必要なjarパッケージのダウンロードアドレス:json-jarパッケージ(ポイント0をクリックしてダウンロード)
jsのコード
function saveOrder(){
	var postMethod ;//    
	
	if($("#post_method").val==1){
		postMethod = 1;
	}else{
		$("[name='company']").each(function(){
			if(this.checked){
				postMethod = this.id.substr(this.id.indexOf("_")+1,this.id.length);
			}
		});
	}
	
	var postInfo;//    
	var index = -1;
	$("[name='radio2']").each(function(){//             
		if(this.checked){
			index = this.id.substr(this.id.indexOf("_")+1,this.id.length);
		}
	});
	
	if(index!=-1){
		postInfo = {
				"address":$("#address_"+index).html(),
				"city":$("#city"+index).html(),
				"county":$("#seat"+index).html(),
				"linkManName":$("#postLinkManName"+index).html(),
				"linkManPhone":$("#linkManTel"+index).html(),
				"linkManSex":null,
				"postCode":null,
				"postMethod":postMethod,//    
				"province":$("#province"+index).html(),
				"remark":$("#remark").html()
			};
	}else{
		postInfo = {
				"address":$("#address").val(),
				"city":$("#city").val(),
				"county":$("#seat").val(),
				"linkManName":$("#postLinkManName").html(),
				"linkManPhone":$("#linkManTel").html(),
				"linkManSex":$("#sex").val(),
				"postCode":$("#postCode").html(),
				"postMethod":postMethod,//    
				"province":$("#province").val(),
				"remark":$("#remark").html()
			};
	}
	var isPost = false;
	$("[name='isPost']").each(function(){//        
		if(this.checked&&this.value=="1"){
			isPost = true;
		}
	});

	if(!isPost){
		postInfo = {};
	}
	
	var travellers = new Array();
	
	for (var i = 0;i < $("#tabCount").val();i++) {
		var travellerType = $("#travellerType"+i).val();
		var tickets = new Array();//    ,       
		for(var j = 0;j<$("#priceCount").val();j = j + 2){//      
			var ticketUnites = [{"arriveCity":$("#departAirport"+j).html(),								//    
								 "arriveTime":$("#departDate"+j).html()+" "+$("#arriveTime"+j).html(),
								 "departCity":$("#arriveAirport"+j).html(),
								 "departTime":$("#flightDate"+j).html()+" "+$("#departTime"+j).html(),
								 "flightNum":$("#flightNum"+j).html(),
								 "serialNum":1,
								 "shippingSpace":$("#shippingSpace"+j).html()},
								 {"arriveCity":$("#departAirport"+j).html(),
								  "arriveTime":$("#departDate"+j).html()+" "+$("#arriveTime"+j).html(),
								  "departCity":$("#arriveAirport"+j).html(),
								  "departTime":$("#flightDate"+j).html()+" "+$("#departTime"+j).html(),
								  "flightNum":$("#flightNum"+j).html(),
								  "serialNum":2,
								  "shippingSpace":$("#shippingSpace"+j).html()}];
			tickets[j]={
				"airBuildCost":$("#airBuildCost"+j+"_"+travellerType).html()+$("#airBuildCost"+(j+1)+"_"+travellerType).html(),
				"airOilCost":$("#airOilCost"+j+"_"+travellerType).html()+$("#airOilCost"+(j+1)+"_"+travellerType).html(),
				"insuranceCost":0,
				"isReturn":false,
				"ticketPrice":$("#ticketPrice"+j+"_"+travellerType).html()+$("#ticketPrice"+(j+1)+"_"+travellerType).html(),
				"ticketUnites":JSON.stringify(ticketUnites)
			};
		}
		travellers[i] = {//  
			"birthDate":$("#birthDate"+i).html(),
			"cnFirstName":null,
			"cnFullName":$("#cnFullName"+i).val(),
			"cnLastName":null,
			"credCode":$("#credCode"+i).html(),
			"credType":$("#credType"+i).html(),
			"customerCode":$("#customerCode"+i).html(),
			"enFirstName":null,
			"enFullName":null,
			"enLastName":null,
			"isBuyInsurance":true,
			"memberCardCode":$("#memberCardCode"+i).html(),
			"memberCardType":$("#memberCardType"+i).html(),
			"parendName":$("#parendName"+i).val(),
			"parentId":null,
			"phone":$("#phone"+i).html(),
			"travellerType":travellerType,
			"tickets":JSON.stringify(tickets)
		};
		
	}
	var legInfoes = new Array();
	var tickets = new Array();
	var salesTicketPrice = new Array();
	
	for (var i = 0 ; i < $("#fCount").val() ; i++) {
		legInfoes[i] = {//    
			"aircraftType" : $("#aircraftType" + i).html(),
			"arriveAirport" : $("#to" + i).html(),
			"arriveTime":$("#arriveTime" + i).html(),
			"changeStop" : $("#changeStop" + i).html(),
			"departAirport":$("#departAirport" + i).html(),
			"departTime":$("#departTime" + i).html(),
			"flightDate":$("#flightDate"+i).html(),
			"flightNum":$("#flightNum" + i).html(),
			"meal":$("#meal" + i).html(),
			"shippingSpace":$("#shippingSpace" + i).html()
			};
	};
	var order = {"airBuildCost" : $("#airBuildCost").html(),//  
				 "airOilCost" : $("#airOilCost").html(),
				 "insuranceCost" : $("#insuranceCost").html(),
				 "isReduceOrder":false,
				 "linkManBackPhone":$("#linkManBackPhone").html(),
				 "linkManName":$("#linkManName").html(),
				 "linkManPhone":$("#linkManPhone").html(),
				 "memberCardCode":$("#membershipCardCode1").html(),
				 "memberCredCode":$("#credentialsCode1").html(),
				 "memberName":$("#travellerChFullName1").html(),
				 "orderStatus":1,
				 "orderType":1,
				 "privilegeCost":$("#privilegeCost").html(),
				 "reserveDate":(($("#reserveTicketdate").html()=='')?null:$("#reserveTicketdate").html()),
				 "reserveTime":$("#reserveTicketTime").html(),
				 "ticketPrice":$("#ticketPrice").html(),
				 "totalPayCost":$("#totalPayCost").html()};
	var obj = {"order" : JSON.stringify(order),
			   "salesLegInfoes" : JSON.stringify(legInfoes),
			   "postInfo" : JSON.stringify(postInfo),
			   "travellers" : JSON.stringify(travellers)
			  };
	$.post("${ctx}/response/save/",obj,function(data){
		alert(data.flag);
	});
	
	//$(".dialog").dialog("open");
}
</script>
バックグラウンドで得られたデータは、次のようなものです.
{"order":
"{\"airBuildCost\":\"300\",\"airOilCost\":\"420\",
\"insuranceCost\":\"100\",\"isReduceOrder\":false,
\"linkManBackPhone\":\"fref\",\"linkManName\":\"qfqf\",
\"linkManPhone\":\"fer\",\"orderStatus\":1,\"orderType\":1,
\"privilegeCost\":\"1000\",\"reserveDate\":\"\",
\"reserveTime\":\"21\",\"ticketPrice\":\"2410\",
\"totalPayCost\":\"10000\"}",
"salesLegInfoes":"[
	{\"aircraftType\":\"77A\",\"arriveTime\":\"14:00\",\"changeStop\":\"0\",\"departAirport\":\"CAN\",\"departTime\":\"11:00\",\"flightDate\":\"2011-5-20\",\"flightNum\":\"HU3101\",\"meal\":\"  \",\"shippingSpace\":\"\"},
	{\"aircraftType\":\"77A\",\"arriveTime\":\"14:00\",\"changeStop\":\"0\",\"departAirport\":\"CAN\",\"departTime\":\"11:00\",\"flightDate\":\"2011-5-20\",\"flightNum\":\"HU3101\",\"meal\":\"  \",\"shippingSpace\":\"\"},
	{\"aircraftType\":\"77A\",\"arriveTime\":\"14:00\",\"changeStop\":\"0\",\"departAirport\":\"CAN\",\"departTime\":\"11:00\",\"flightDate\":\"2011-5-20\",\"flightNum\":\"HU3101\",\"meal\":\"  \",\"shippingSpace\":\"\"}]",
"postInfo":"{}",
"travellers":"[
	{\"birthDate\":\"2013-07-01\",\"cnFirstName\":null,\"cnFullName\":\"\
\\t\\t\\t\
\\t\\t\\t\\tfewdfwedwefgreg\
\\t\\t\\t\\t\
\\t\\t\\t\\t\
\\t\\t\\t\
\\t\\t\\t \",\"cnLastName\":null,\"credCode\":\"fewf\",\"customerCode\":\"fwerf\",\"enFirstName\":null,\"enFullName\":null,\"enLastName\":null,\"isBuyInsurance\":true,\"memberCardCode\":\"qq\",\"memberCardType\":\"\",\"parendName\":\"\",\"parentId\":null,\"phone\":\"fwe\",\"travellerType\":\"\", \"tickets\":\"[ {\\\"airBuildCost\\\":null,\\\"airOilCost\\\":null,\\\"insuranceCost\\\":0,\\\"isReturn\\\":false,\\\"ticketPrice\\\":null, \\\"ticketUnites\\\":\\\"[ {\\\\\\\"arriveCity\\\\\\\":\\\\\\\"CAN\\\\\\\",\\\\\\\"arriveTime\\\\\\\":\\\\\\\"2011-5-21 14:00\\\\\\\",\\\\\\\"departCity\\\\\\\":\\\\\\\"PEK\\\\\\\",\\\\\\\"departTime\\\\\\\":\\\\\\\"2011-5-20 11:00\\\\\\\",\\\\\\\"flightNum\\\\\\\":\\\\\\\"HU3101\\\\\\\",\\\\\\\"serialNum\\\\\\\":1,\\\\\\\"shippingSpace\\\\\\\":\\\\\\\"\\\\\\\"}, {\\\\\\\"arriveCity\\\\\\\":\\\\\\\"CAN\\\\\\\",\\\\\\\"arriveTime\\\\\\\":\\\\\\\"2011-5-21 14:00\\\\\\\",\\\\\\\"departCity\\\\\\\":\\\\\\\"PEK\\\\\\\",\\\\\\\"departTime\\\\\\\":\\\\\\\"2011-5-20 11:00\\\\\\\",\\\\\\\"flightNum\\\\\\\":\\\\\\\"HU3101\\\\\\\",\\\\\\\"serialNum\\\\\\\":2,\\\\\\\"shippingSpace\\\\\\\":\\\\\\\"\\\\\\\"} ]\\\"},null, {\\\"airBuildCost\\\":null,\\\"airOilCost\\\":null,\\\"insuranceCost\\\":0,\\\"isReturn\\\":false,\\\"ticketPrice\\\":null, \\\"ticketUnites\\\":\\\"[ {\\\\\\\"arriveCity\\\\\\\":\\\\\\\"CAN\\\\\\\",\\\\\\\"arriveTime\\\\\\\":\\\\\\\"2011-5-21 14:00\\\\\\\",\\\\\\\"departCity\\\\\\\":\\\\\\\"PEK\\\\\\\",\\\\\\\"departTime\\\\\\\":\\\\\\\"2011-5-20 11:00\\\\\\\",\\\\\\\"flightNum\\\\\\\":\\\\\\\"HU3101\\\\\\\",\\\\\\\"serialNum\\\\\\\":1,\\\\\\\"shippingSpace\\\\\\\":\\\\\\\"\\\\\\\"}, {\\\\\\\"arriveCity\\\\\\\":\\\\\\\"CAN\\\\\\\",\\\\\\\"arriveTime\\\\\\\":\\\\\\\"2011-5-21 14:00\\\\\\\",\\\\\\\"departCity\\\\\\\":\\\\\\\"PEK\\\\\\\",\\\\\\\"departTime\\\\\\\":\\\\\\\"2011-5-20 11:00\\\\\\\",\\\\\\\"flightNum\\\\\\\":\\\\\\\"HU3101\\\\\\\",\\\\\\\"serialNum\\\\\\\":2,\\\\\\\"shippingSpace\\\\\\\":\\\\\\\"\\\\\\\"} ]\\\"}]\"}, {\"birthDate\":\"2013-07-01\",\"cnFirstName\":null,\"cnFullName\":\"\
\\t\\t\\t\
\\t\\t\\t\\tferwfer\
\\t\\t\\t\\t\
\\t\\t\\t\\t\
\\t\\t\\t\
\\t\\t\\t \",\"cnLastName\":null,\"credCode\":\"\",\"customerCode\":\"\",\"enFirstName\":null,\"enFullName\":null,\"enLastName\":null,\"isBuyInsurance\":true,\"memberCardCode\":\"\",\"memberCardType\":\"\",\"parendName\":\"\",\"parentId\":null,\"phone\":\"\",\"travellerType\":\"\", \"tickets\":\"[ {\\\"airBuildCost\\\":null,\\\"airOilCost\\\":null,\\\"insuranceCost\\\":0,\\\"isReturn\\\":false,\\\"ticketPrice\\\":null, \\\"ticketUnites\\\":\\\"[ {\\\\\\\"arriveCity\\\\\\\":\\\\\\\"CAN\\\\\\\",\\\\\\\"arriveTime\\\\\\\":\\\\\\\"2011-5-21 14:00\\\\\\\",\\\\\\\"departCity\\\\\\\":\\\\\\\"PEK\\\\\\\",\\\\\\\"departTime\\\\\\\":\\\\\\\"2011-5-20 11:00\\\\\\\",\\\\\\\"flightNum\\\\\\\":\\\\\\\"HU3101\\\\\\\",\\\\\\\"serialNum\\\\\\\":1,\\\\\\\"shippingSpace\\\\\\\":\\\\\\\"\\\\\\\"}, {\\\\\\\"arriveCity\\\\\\\":\\\\\\\"CAN\\\\\\\",\\\\\\\"arriveTime\\\\\\\":\\\\\\\"2011-5-21 14:00\\\\\\\",\\\\\\\"departCity\\\\\\\":\\\\\\\"PEK\\\\\\\",\\\\\\\"departTime\\\\\\\":\\\\\\\"2011-5-20 11:00\\\\\\\",\\\\\\\"flightNum\\\\\\\":\\\\\\\"HU3101\\\\\\\",\\\\\\\"serialNum\\\\\\\":2,\\\\\\\"shippingSpace\\\\\\\":\\\\\\\"\\\\\\\"} ]\\\"},null, {\\\"airBuildCost\\\":null,\\\"airOilCost\\\":null,\\\"insuranceCost\\\":0,\\\"isReturn\\\":false,\\\"ticketPrice\\\":null, \\\"ticketUnites\\\":\\\"[ {\\\\\\\"arriveCity\\\\\\\":\\\\\\\"CAN\\\\\\\",\\\\\\\"arriveTime\\\\\\\":\\\\\\\"2011-5-21 14:00\\\\\\\",\\\\\\\"departCity\\\\\\\":\\\\\\\"PEK\\\\\\\",\\\\\\\"departTime\\\\\\\":\\\\\\\"2011-5-20 11:00\\\\\\\",\\\\\\\"flightNum\\\\\\\":\\\\\\\"HU3101\\\\\\\",\\\\\\\"serialNum\\\\\\\":1,\\\\\\\"shippingSpace\\\\\\\":\\\\\\\"\\\\\\\"}, {\\\\\\\"arriveCity\\\\\\\":\\\\\\\"CAN\\\\\\\",\\\\\\\"arriveTime\\\\\\\":\\\\\\\"2011-5-21 14:00\\\\\\\",\\\\\\\"departCity\\\\\\\":\\\\\\\"PEK\\\\\\\",\\\\\\\"departTime\\\\\\\":\\\\\\\"2011-5-20 11:00\\\\\\\",\\\\\\\"flightNum\\\\\\\":\\\\\\\"HU3101\\\\\\\",\\\\\\\"serialNum\\\\\\\":2,\\\\\\\"shippingSpace\\\\\\\":\\\\\\\"\\\\\\\"} ]\\ \"} ]\ "} ]" }

ここのjsonは複雑で
解析は以下の通り
/**
  * @description:     
  * @author: luoxiaoyang
  * @createDate: 2013-7-16
  * @param request
  * @return:
  */
 @SuppressWarnings("unchecked")
 @RequestMapping(value = "/save/", method = RequestMethod.POST 
   ,headers = "X-Requested-With=XMLHttpRequest")
 @ResponseBody
 public ResultData save(HttpServletRequest request) {
  //           
  String orderStr = request.getParameter("order");
  String salesLegInfoesStr = request.getParameter("salesLegInfoes");
  String postInfoStr = request.getParameter("postInfo");
  String travellersStr = request.getParameter("travellers");

  //    json   ,           
  JSONUtils.getMorpherRegistry().registerMorpher(
    new DateMorpher(new String[] { "yyyy-MM-dd" }));
  SalesOrder order = (SalesOrder) JSONObject.toBean(JSONObject
    .fromObject(orderStr), SalesOrder.class);
  List<SalesLegInfo> salesLegInfos = (List<SalesLegInfo>) JSONArray
    .toCollection(JSONArray.fromObject(salesLegInfoesStr),
      SalesLegInfo.class);
  SalesPostInfo postInfo = (SalesPostInfo) JSONObject.toBean(JSONObject
    .fromObject(postInfoStr), SalesPostInfo.class);
  JSONArray travellersJsonArr = JSONArray.fromObject(travellersStr);//     
  System.out.println("travellersJsonArr:"+travellersJsonArr);
  //     
  List<SalesTraveller> travellers = new ArrayList<SalesTraveller>();
  System.out.println(travellersJsonArr.size());
  for (int i = 0; i < travellersJsonArr.size(); i++) {
   JSONObject travellerJson = JSONObject.fromObject(travellersJsonArr
     .get(i));
   System.out.println("salesTraveller:"+travellerJson.discard(""));
   SalesTraveller salesTraveller = (SalesTraveller) JSONObject.toBean(
     JSONObject.fromObject(travellerJson.discard("tickets")),
     SalesTraveller.class);

   JSONArray ticketsJsonArr = JSONArray.fromObject(travellerJson
     .get("tickets"));

   List<SalesTicket> tickets = new ArrayList<SalesTicket>();
   for (int j = 0; j < ticketsJsonArr.size(); j++) {
    JSONObject ticketJson = JSONObject.fromObject(ticketsJsonArr
      .get(j));
    SalesTicket ticket = (SalesTicket) JSONObject.toBean(JSONObject
      .fromObject(ticketJson.discard("ticketUnites")),
      SalesTicket.class);

    List<SalesTicketUnite> ticketUnite = (List<SalesTicketUnite>) JSONArray
      .toCollection(JSONArray.fromObject(ticketJson
        .get("ticketUnites")), SalesTicketUnite.class);

    ticket.setTicketUnites(ticketUnite);
    tickets.add(ticket);
   }
   salesTraveller.setSalesTickets(tickets);
   travellers.add(salesTraveller);
  }

  order.setSalesLegInfos(salesLegInfos);
  order.setSalesPostInfo(postInfo);
  order.setSalesTravellers(travellers);
  orderService.save(order);
  System.out.println(JSONObject.fromObject(order).toString());
  return new ResultData(true);
 }