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);
}
}
}
}

posted on 2017-02-27 15:53  lijunzhou  阅读(4108)  评论(0编辑  收藏  举报

导航