json to string/string to json


JSON<--->String

字符串和JSON之間的相互轉換主要是JSON參數的拼裝和解析.

一、目標字符串:{"LT_TABLE":[{"T_ACT_DOC_HEAD_I":[{"SOURCE":"EAS(HRP)","BUKRS":"1000","GJAHR":"2016","OBELNR":"100000000","USNAM":"","BUDAT":"","BELNR_R":"","WAERS":"","KURSF":"","BELNR":""},{"SOURCE":"EAS(HRP)","BUKRS":"2000","GJAHR":"2016","OBELNR":"100000002","USNAM":"","BUDAT":"","BELNR_R":"","WAERS":"","KURSF":"","BELNR":""}],"T_ACT_DOC_ITEM_I":[{"SOURCE":"EAS(HRP)","BUKRS":"1000","GJAHR":"2016","OBELNR":"100000000","BUZEI":"1 ","OSHKZG":"","LIFNR":"","HKONT":"","WRBTR":"","KOSTL":"","SGTXT":"","FBKNUM":"","FBKACT":""},{"SOURCE":"EAS(HRP)","BUKRS":"1000","GJAHR":"2016","OBELNR":"100000000","BUZEI":"2 ","OSHKZG":"","LIFNR":"","HKONT":"","WRBTR":"","KOSTL":"","SGTXT":"","FBKNUM":"","FBKACT":""},{"SOURCE":"EAS(HRP)","BUKRS":"2000","GJAHR":"2016","OBELNR":"100000002","BUZEI":"1 ","OSHKZG":"","LIFNR":"","HKONT":"","WRBTR":"","KOSTL":"","SGTXT":"","FBKNUM":"","FBKACT":""},{"SOURCE":"EAS(HRP)","BUKRS":"2000","GJAHR":"2016","OBELNR":"100000002","BUZEI":"2 ","OSHKZG":"","LIFNR":"","HKONT":"","WRBTR":"","KOSTL":"","SGTXT":"","FBKNUM":"","FBKACT":""},{"SOURCE":"EAS(HRP)","BUKRS":"2000","GJAHR":"2016","OBELNR":"100000002","BUZEI":"3 ","OSHKZG":"","LIFNR":"","HKONT":"","WRBTR":"","KOSTL":"","SGTXT":"","FBKNUM":"","FBKACT":""}]}]} 

格式化之后分析(如果需求中的json結構自己看不明白,可將需求粘貼至http://www.json.cn/中格式化即可)

圖0的結構是一個vo,亦可放到array中;

圖1的結構是一個array/vo中存一個key為"LT_TABLE",value為一個array的map;

圖2的結構是array中存的是一個VO(object value,此處解析工具解析出來沒有vo類的類名)

圖3的結構是這個vo的兩個屬性,key分別為"T_ACT_DOC_HEAD_I"和"T_ACT_DOC_ITEM_I"的兩個map,map的value分別是兩個array

圖4的結構是key為"T_ACT_DOC_HEAD_I"的map中存的一個長度為2的array和key為"T_ACT_DOC_ITEM_I"的map中存的一個長度為5的array.

圖5的結構是長度為5的array和長度為2的array中存的不同的vo.

圖0.

 

圖1.

 

圖2.

 

圖3.

 

圖4.

 

 

圖5.

 

圖6.

 json轉換string

JsonConfig jsonCfg = new JsonConfig();
String jsonStr=null;

//判斷是否是list (LT_TABLE instanceof Collection || LT_TABLE instanceof Object[])
if (mapTable instanceof Collection) {
jsonStr = JSONArray.fromObject(mapTable, jsonCfg).toString();
} else {
jsonStr = JSONObject.fromObject(mapTable, jsonCfg).toString();
}  

二、json解析

待解析字符串:{"LT_TABLE":[{"T_ACT_DOC_HEAD_O":[{"SOURCE":"EAS(HRP)","BUKRS":"1000","GJAHR":"2016","OBELNR":"100000000","BELNR":"0100000002","TYPE":"S","LOG":"成功!"},{"SOURCE":"EAS(HRP)","BUKRS":"2000","GJAHR":"2016","OBELNR":"100000002","BELNR":"0100000005","TYPE":"E","LOG":"失敗!"}]}]}

結構分析:

圖0.對方系統返回的字符串,本人用array存,也可以用vo存,跟上邊一樣,但是轉json的方式就不是用上邊這種方式轉換了。

圖1.array中存的一個key為"LT_TABLE",value為一個array的map。

圖2.array中存一個vo。

圖3.這個vo只有一個為map的屬性,這個屬性名為“T_ACT_DOC_HEAD_O”,key也是“T_ACT_DOC_HEAD_O”,value是一個array。

圖4.這個array中存兩個vo。

圖5.其中一個vo的屬性。

圖0.

 

圖1.

 

圖2.

 

圖3.

 

圖4.

 

圖5

附:代碼(json to string)

ArrayList<JsonDetailVO> jsonDetailVOlList= new ArrayList<JsonDetailVO>();
ArrayList<JsonVoucherVO> jsonVoucherVOList= new ArrayList<JsonVoucherVO>();

for(int i=0;i< vouchervos.size();i++){
VoucherVO voucherVO = vouchervos.get(i);
String HRStr=voucherVO.getYear()+voucherVO.getPeriod()+voucherVO.getPrepareddate().toString().substring(8,10)+":"+voucherVO.getNo();
JsonVoucherVO jsonVoucherVO=new JsonVoucherVO();
jsonVoucherVO.setSOURCE("HRP");//數據源
jsonVoucherVO.setBUKRS(voucherVO.getPk_group().toString());//公司代碼
jsonVoucherVO.setGJAHR(voucherVO.getYear().toString());//會計年度
jsonVoucherVO.setOBELNR(HRStr);//HR憑證號
jsonVoucherVO.setUSNAM(voucherVO.getCreator().toString());//輸入者
jsonVoucherVO.setBUDAT("憑證中的過賬日期");//憑證中的過賬日期:voucherVO.getTallydate().toString()
jsonVoucherVO.setBELNR_R("待沖銷SAP憑證號 ");//待沖銷SAP憑證號 :voucherVO.getOffervoucher().toString()
jsonVoucherVO.setWAERS("貨幣碼");//貨幣碼
jsonVoucherVO.setKURSF("匯率");//匯率
jsonVoucherVO.setBELNR("會計文件號碼");//會計文件號碼
jsonVoucherVOList.add(jsonVoucherVO);

DetailVO[] detailVOlist1=voucherVO.getDetails();
for(int j=0;j<detailVOlist1.length;j++){
DetailVO detailVO = detailVOlist1[i];
JsonDetailVO jsonDetailVO=new JsonDetailVO();

jsonDetailVO.setSOURCE("HRP");//數據源
jsonDetailVO.setBUKRS("公司代碼");//公司代碼
jsonDetailVO.setGJAHR(detailVO.getPrepareddate().toString());//會計年度
jsonDetailVO.setOBELNR(HRStr);//HRP憑證號
jsonDetailVO.setBUZEI("明細項號碼");//明細項號碼
jsonDetailVO.setOSHKZG("EAS(HRP)借貸標示");//EAS(HRP)借貸標示
jsonDetailVO.setLIFNR("供應商編碼");//供應商編碼
jsonDetailVO.setHKONT(detailVO.getOppositesubj().toString());//科目編碼
jsonDetailVO.setWRBTR("金額");//金額 
jsonDetailVO.setKOSTL("成本中心");//成本中心
jsonDetailVO.setSGTXT(detailVO.getExplanation().toString());//摘要
jsonDetailVO.setFBKNUM("付款銀行碼");//付款銀行碼
jsonDetailVO.setFBKACT("付款賬號");//付款賬號
jsonDetailVOlList.add(jsonDetailVO);
}
}
// 表頭
HashMap<String, List> mapHead= new HashMap();
// 表體
HashMap<String, List> mapItem= new HashMap();
// 外層
HashMap<String, List> mapTable= new HashMap();
ArrayList list=new ArrayList<Map>();
mapHead.put("T_ACT_DOC_HEAD_I", jsonVoucherVOList);
mapItem.put("T_ACT_DOC_ITEM_I", jsonDetailVOlList);
list.add(mapHead);
list.add(mapItem);
mapTable.put("LT_TABLE", list);
//拼接參數
JsonConfig jsonCfg = new JsonConfig();
String jsonStr=null;

//判斷是否是list (LT_TABLE instanceof Collection || LT_TABLE instanceof Object[])
if (mapTable instanceof Collection) {
jsonStr = JSONArray.fromObject(mapTable, jsonCfg).toString();
} else {
jsonStr = JSONObject.fromObject(mapTable, jsonCfg).toString();
}

 

 代碼(String to json)

 

sapResponse1="{'LT_TABLE':[{'T_ACT_DOC_HEAD_O':[{'SOURCE':'EAS(HRP)','BUKRS':'1000','GJAHR':'20161216:2','OBELNR':'100000000','BELNR':'0100000002','TYPE':'S','LOG':'成功!'},{'SOURCE':'EAS(HRP)','BUKRS':'2000','GJAHR':'20161216:2','OBELNR':'100000002','BELNR':'0100000005','TYPE':'E','LOG':'失敗!'}]}]}";
uap.json.JSONObject jsonObjout = new uap.json.JSONObject(sapResponse1);
Iterator itout = jsonObjout.keys();
for(int i=0;itout.hasNext();i++){
String LT_TABLE=itout.next().toString();
String sapResponse2 = jsonObjout.get(LT_TABLE).toString();
JSONArray jsonArray1 = JSONArray.fromObject(sapResponse2);
for(int ii=0;ii<jsonArray1.size();ii++ ){
Object sapResponse =jsonArray1.get(ii);

uap.json.JSONObject jsonObjin = new uap.json.JSONObject(sapResponse.toString());
Iterator itin = jsonObjin.keys();
for(int j=0;itin.hasNext();j++){
String T_ACT_DOC_HEAD_O=itin.next().toString();
String stringArray = jsonObjin.get(T_ACT_DOC_HEAD_O).toString();
JSONArray jsonArray = JSONArray.fromObject(stringArray);
for (int k = 0; k < jsonArray.size(); k++) {
JSONObject jsonObject = jsonArray.getJSONObject(k);
JsonResponseVO ResponseVO = (JsonResponseVO) JSONObject.toBean(jsonObject,JsonResponseVO.class);
String belnr = ResponseVO.getBELNR();
String gjahr = ResponseVO.getGJAHR();// 20161216:2
String year = gjahr.substring(0, 4);
String mouth = gjahr.substring(4, 6);
String[] split = gjahr.split(":");
String num = split[1];

String upsql = "update gl_voucher g set g.free2 = '"+belnr+"' where g.year = '"+year+"' and g.會計期間 = '"+mouth+"' and g.num = '"+num+"'";
dao.executeUpdate(upsql);
}
}
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM