原文:
ES6中的数据转换(JSON、Map、String)_ZMyths的博客-CSDN博客_es6 字符串转json
需求: 如何将输入的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");
————————————————
版权声明:本文为CSDN博主「Zmyths」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zcyzsy/article/details/81459319