本文详细讲解了如何在JavaScript中将数组转换为JSON格式并传递给Java后台,以及在后端使用Fastjson库进行解析的具体实现。通过前端自定义转换函数与后端JSONArray对象的二次处理,解决了多维数组在前后端交互时的数据格式兼容问题,提供了完整的代码示例和解析逻辑说明。
JavaScript数组转JSON及Java后台解析实现
在Web开发中,经常需要将前端获取的数据传递给后端。如果直接将JavaScript数组传给后台,后端往往无法正确识别其结构,特别是当数组包含多维数据时,例如:1,张三,23,2,李四,26,这种扁平化的字符串形式会导致解析困难。
针对这一问题,下面整理了一种有效的解决方法,旨在帮助开发者顺利实现前后端数据交互。
解决的关键步骤之一,是在JavaScript端将数组转换为标准的JSON格式字符串。
前端JavaScript转换代码
具体的JavaScript实现代码如下:
代码如下:
/**
*js数组转json
*
*/
function arrayToJson(o) {
var r = [];
if (typeof o == "string") return "/"" + o.replace(/([/'/"//])/g, "//$1").replace(/(/n)/g, "//n").replace(/(/r)/g, "//r").replace(/(/t)/g, "//t") + "/"";
if (typeof o == "object") {
if (!o.sort) {
for (var i in o)
r.push(i + ":" + arrayToJson(o[i]));
if (!!document.all && !/^/n?function/s*toString/(/)/s*/{/n?/s*/[native code/]/n?/s*/}/n?/s*$/.test(o.toString)) {
r.push("toString:" + o.toString.toString());
}
r = "{" + r.join() + "}";
} else {
for (var i = 0; i < o.length; i++) {
r.push(arrayToJson(o[i]));
}
r = "[" + r.join() + "]";
}
return r;
}
return o.toString();
} 后端Java解析逻辑
然后是在Java后台接收该字符串后,对其进行JSON转换处理。
代码如下:
com.alibaba.fastjson.JSONArray mainArray=JSON.parseArray(info.getMainparame());
log.debug("数组大小:"+mainArray.size());
for(int i=0;i< mainArray.size();i++){
QybjProduceParam p=new QybjProduceParam();
com.alibaba.fastjson.JSONArray paramObject=(com.alibaba.fastjson.JSONArray)mainArray.get(i);
p.setParamename(paramObject.get(1).toString());
p.setParamevalue(paramObject.get(2).toString());
params.add(p);
}
info.setParams(params);从上述Java代码可以看出,后端处理过程涉及两次转换:首先将字符串转为JSONArray对象,随后再次将其中的元素转为JSONArray对象进行提取。
需要注意的是,如果前端传递的是一维数组,后端只需进行一次转换即可。