需求: 如何将输入的json字符串转换成一个map对象,传入到向后端的request中 ?

具体问题描述: 项目需要从vue前端传一个Json对象到request中,而后端的接口参数类型是Map对象。所以需要先json解析转成Map,但ajax的序列化又会给Map对象外面套上一层数组,所以会与后端接口中的参数类型不匹配。具体解决方法如下。

 

1. 先判断输入的是否是合法的json字符串

//判断是否是合法的Json字符串
isJSON(str) {

if (typeof str == 'string') {

try {

var obj=JSON.parse(str);

if(typeof obj == 'object' && obj ){

return true;

}else{

return false;

}

} catch(e) {

return false;

}

}

return false;

},

 

2.检验json字符串合法之后,再进行JSON -> Map转换:

  (Json转换为Map不能直接转换,json转为对象,在转换为Map。)

jsonStrToStrMap(jsonStr){

  let jsonObj = JSON.parse(jsonStr);

  let strMap = new Map();

  for (let k of Object.keys(jsonObj)) {

     strMap.set(k,jsonObj[k]);

   }

  return strMap;

  },

 

3.解决序列化问题

这里可以将json解析出来按照KV存在Map中,但塞进request中之后,传输到后端就变成了[MapObj],这样的数组对象。所以想完美传送过去,就必须弱化类型,如下:

jsonStrToStrMap(jsonStr){

 let jsonObj = JSON.parse(jsonStr);   

 let strMap = {};

 for(var k in jsonObj ){

  strMap[k] = jsonObj[k];

 }

 return strMap;

},

  如上,传进去的只是Object类型,不会被强制类型转换,Map的数据和结构就可以传到后端啦。

注意:上面是json字符串转map,如果是json对象,那就将 let jsonObj = JSON.parse(jsonStr); 这一句去掉就好。

 

4.补充其他类型转换的方法

Json和字符串之间的转换:

Json转换成String:

let jstr =  JSON.stringify(JsonObj);

String转换成Json:

let jsonObj = JSON.parse(jsonStr);

Map ->Json :

Map不能直接转换为Json,Map先要转换为Object,在转换为json。 

  strMapToJson(strMap){

   let obj= Object.create(null);

   for (let[k,v] of strMap) {

     obj[k] = v;

    }

   let JsonStr = JSON.stringify(obj);
   
   return  JsonStr;

   }

主要传输的对象就是Json,Map,String比较多。

 

5.从jsonobject中取出整个数组的值

   JSONObject jsonObject = JSON.parseObject(s);

   //注意:array中的内容带有中括号[],所以要转化为JSONArray类型的对象
   JSONArray family = jsonObject.getJSONArray("array");

     

 

Logo

前往低代码交流专区

更多推荐