通过IRowSet结果集转换为json报文原创
金蝶云社区-湖南客户成功_刘敏
湖南客户成功_刘敏
55人赞赏了该文章 422次浏览 未经作者许可,禁止转载编辑于2023年09月26日 14:10:44

/**

* 获取返回的JSON文件格式 传入的数据集必须第一个字段名称为FID,如果是单据,分录字段前面必须加前缀ENTRY_   (客户端服务端通用:客户端ctx传入空值,服务端传入ctx)

* @param rowSet 数据集

* @return

* @throws BOSException

* @throws EASBizException

* @throws EASDBException

*/

public static String getRtrnForJSON(Context ctx, IRowSet rowSet, String billId) throws BOSException, EASBizException,

EASDBException {

// TODO Auto-generated method stub

String JSONData = "[{}]";

try {

if (!EmptyUtil.isEmpty(rowSet)&&rowSet.size()>0) {

// 组合结果集的JSON文件

JSONObject billInfo = new JSONObject();

JSONObject billEntryInfo = new JSONObject();

List billList = new ArrayList();

List billEntryList = new ArrayList();

String ids = "";

String lastId = "";

while (rowSet.next()) {

String newId = "";

//获取数据集列的集合

ResultSetMetaData rsMetaData = rowSet.getMetaData();

int count = rsMetaData.getColumnCount();

String id = "";

billEntryInfo = new JSONObject();

//循环列

for (int i = 1; i <= count; i++) {

//判断是否为分录

// if (rsMetaData.getColumnName(i).indexOf("ENTRY_")!=-1) {

if (rsMetaData.getColumnName(i).indexOf("ENTRY_")!=-1) {

//添加分录数据

billEntryInfo.element(rsMetaData.getColumnName(i).replace("ENTRY_", "").toLowerCase(), rowSet.getString(rsMetaData.getColumnName(i)));

}else {

//获取ID用于区分新旧ID和区分多条数据行的表头和分录

if (billId.equalsIgnoreCase(rsMetaData.getColumnName(i))) {

// if ("FID".equalsIgnoreCase(rsMetaData.getColumnName(i))) {

id = !EmptyUtil.isEmpty(rowSet.getString(rsMetaData.getColumnName(i)))?rowSet.getString(rsMetaData.getColumnName(i)):"";

newId = id;

}

//判断是否循环这条数据的ID是否已经在第一次把表头的数据加载后存入表头ID集合中,如果存在,则表示表头已经添加完成,只需要循环剩下的分录

if (ids.indexOf(id)>=0)

continue;

//添加表头数据

billInfo.element(rsMetaData.getColumnName(i).toLowerCase(), rowSet.getString(rsMetaData.getColumnName(i))!=null?rowSet.getString(rsMetaData.getColumnName(i)):"");

}

}

//将第一次循环的新表头数据加入到集合中后,存储ID以便后面相同的表头数据无需再次加入

if (!EmptyUtil.isEmpty(id)) {

if (ids.indexOf(id)<0){

if (EmptyUtil.isEmpty(ids)) {

ids = id;

}else {

ids = ids + "," + id;

}

}

}

//将数据集中提前与下一条数据的ID进行比对

if (rowSet.next()) {

// lastId = rowSet.getString("FID");

lastId = rowSet.getString(billId);

rowSet.previous();

//如果不同则为另外一条新的单据表头,此时将对当前循环存储的表头表体数据进行添加到集合中

if (!newId.equalsIgnoreCase(lastId)) {

if (!billEntryInfo.isEmpty()) {

billEntryList.add(billEntryInfo);

}

if (!EmptyUtil.isEmpty(billEntryList)&&billEntryList.size()>0) {

JSONArray jsonArray = JSONArray.fromObject(billEntryList);

billInfo.element("ENTRY",jsonArray.toString());

}

billList.add(billInfo);

billInfo = new JSONObject();

billEntryInfo = new JSONObject();

billEntryList = new ArrayList();

}else {//如果相同则把分录添加到分录的集合中去

if (!EmptyUtil.isEmpty(billEntryInfo)) {

billEntryList.add(billEntryInfo);

}

}

}else {//如果下一条不存在,则对整个循环进行一个整合并结束

if (!billEntryInfo.isEmpty()) {

billEntryList.add(billEntryInfo);

}

if (!EmptyUtil.isEmpty(billEntryList)&&billEntryList.size()>0) {

JSONArray jsonArray = JSONArray.fromObject(billEntryList);

billInfo.element("ENTRY",jsonArray.toString());

}

billList.add(billInfo);

billInfo = new JSONObject();

billEntryInfo = new JSONObject();

billEntryList = new ArrayList();

break;

}

}

JSONArray jsonArray = JSONArray.fromObject(billList);

// 生成JSON字符串

JSONData = jsonArray.toString();

// System.out.println("返回JSON报文:" + JSONData);

}

} catch (SQLException e) {

// TODO Auto-generated catch block

System.out.println("查询出错:" + e.getMessage());

e.printStackTrace();

}

return JSONData;


赞 55