ES6中的数据转换(JSON、Map、String)
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/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");
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献3条内容
所有评论(0)