ES6中的数据转换(JSON、Map、String)【转】

原文:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java架构师Array

Array老师视频专栏更精彩~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值