目前情况:后台传入json的String字符串,需要解析出里面每个字段并作为VM属性,json如下:
[{
"wx_account_def": "{\"wx_back_url\":\"http://www.weixin.qq.com/wxpay/pay.phpAA\",\"wx_app_id\":\"8866\",\"wx_mch_id\":\"12355\",\"wx_api_key\":\"12345\",\"wx_cert_path\":\"/certPath/wx/0/apiclient_cert.p12AA\"}",
"shop_id": 1,
"org_id": "1",
"id": 1
},
{
"wx_account_def": "{\"wx_back_url\":\"http://www.weixin.qq.com/wxpay/pay.phpAA\",\"wx_app_id\":\"8866\",\"wx_mch_id\":\"12355\",\"wx_api_key\":\"12345\",\"wx_cert_path\":\"/certPath/wx/0/apiclient_cert.p12AA\"}",
"shop_id": 2,
"org_id": "2",
"id": 2
}]
其实这里面每个店面的初始化微信的一些信息是不一样的,而且后台存String不存JSON形式是方便数据库变换,而这里的String的josn里面每个字段对应前端一个组件来显示,就需要把他解析出来并绑定组件,比如span或者input等。
下面贴代码解析和聚合,大概意思就这样子,可以参考:
后台传前端解析:
VM={
init_fields: ['wx_account_def','ali_account_def','union_pay_account_def','parms'],
其他参数:其他参数}
// TODO 云端返回添加数据给VM,分发给字段显示
function InitParams(data){
if(""==data || undefined== data||null==data || data.length<=0){
return data;
}
for(var i=0;i<VM.init_fields.length;i++){
data = InitAddParm(data,VM.init_fields[i]);
}
return data;
}
//TODO 云端返回添加数据给VM wx_account_def,ali_account_def,union_pay_account_def参数英文 parms参数中文
function InitAddParm(data,parmName){
for(var i=0;i<data.length;i++){
if(""==data[i][parmName] || undefined== data[i][parmName]||null==data[i][parmName]){
continue;
}
var parmStr = JSON.parse(data[i][parmName]);
var arrayStr = [];
for(var key in parmStr){
data[i][key]=parmStr[key].toString();
//key存起来当数组方便返回变json
arrayStr.push(key)
}
data[i][parmName]=arrayStr;
}
return data;
}
数据保存的时候需要聚合参数:
// TODO VM一些字段数据集合在一起,返回给云端
function TogetherParams(data) {
if(""==data || undefined== data||null==data || data.length<=0){
return data;
}
for(var i=0;i<VM.init_fields.length;i++){
data = AddTogetherParms(data,VM.init_fields[i]);
}
return data;
}
function AddTogetherParms(data,parmName){
if(""==data[parmName] || undefined== data[parmName]||null==data[parmName]){
return data;
}
//之前key存起来当数组了,现在重新分配并变json形式存数据返回给后台
var arrs = data[parmName].split(',')
var jsonObj = {};
for(var i=0;i<arrs.length;i++){
var arrKey = arrs[i];
var arrValue = data[arrKey];
jsonObj[arrKey]=arrValue;
}
data[parmName]=jsonObj;
return data;
}
结论:大概意思就是后台传前端过来数据先解析并存key,前端传后台先根据Key存成Json形式数据并请求后台,这样子后台服务器又少一点工作量了,只要校验是不是json,是否有这些字段就可以了,不用再拼接