HarmonyOS map数据为2层或者多层时,数据不好转换

1、当Map<string,CommonType>定义的map使用 params[“lnt”] = “118.177704”; 方式赋值,这种方式本质上更像是 :Record<string,CommonType>,一个标准的JSON对象,而不再是map集合,也不可以转换成HashMap容器类并且使用map容器类的方法。

2、当HashMap<string,CommonType>定义的map(推荐定义为HashMap)使用 sendParams.set(“lnt”,“118.177704”); 方式赋值,这个就是标准的map容器类,也可以使用HashMap集合的迭代器遍历。

3、如1中介绍,该定义方式类似于Record,一个JSON对象的格式,所以可以转换为JSON字符串;2中的方式为map集合无法抓换成JSON字符串。

4、遍历map集合,并且生成一个Record对象。(对应JAVA中JSONObject,可转换成类似于JSON串或者JSON对象的操作)

mapIterator(map:HashMap<string, string | number >)
{
  let record: Record<string, string | number> = {};
  try {
    let iter = map.keys();
    let temp: IteratorResult<string> = iter.next();
    while (!temp.done) {
      let key = temp.value;
      let value = map.get(key);
      if (value) { //简单判空。可不要
        record[key] = value
      }
      temp = iter.next();
    }
  } catch (err) {
    console.log(err);
  }
  return record;
}

5、当一个HashMap集合必须使用JSON字符串传递出去时,推荐使用4方法转换成Record对象,然后转换成JSON字符串传递;如果不是必要还是使用HashMap对象在方法内传递保证不会丢失数据。有多层好像就不能这样转,这样会把第2层的数据给抹掉了。

const nullParams:Map<string,CommonType> = new Map();
nullParams.set("noticeTypeParamDTO",nullParams);
const contractVersionQueryDTO:Map<string,CommonType> = new Map();
contractVersionQueryDTO.set("contractType","4");
nullParams.set("contractVersionQueryDTO",contractVersionQueryDTO);
HarmonyOS
2024-12-27 14:46:10
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

从两者的定义上看,Record是类型定义,而Map是接口定义,map支持instanceof来判断出类型为Map,但是Record是没有instanceof来判断类型是Record的,其为对象Object类型,这个也可以通过调式模式执行来看到变量的类型定义。

Record的理解为:将一个类型的所有属性值都映射到另一个类型上并创建一个新的类型,也即将K中的每个属性([P in K])都转为T类型。

Map的理解为:K-V的键-值对方式的映射关系。对于简单的业务使用场景,建议使用Record方式;Map的使用方式更灵活,支持的操作更多,Map相关的类型还有HashMap。或者可以使用Record可以打印,Map适用于存储简单的键值对数据,Record适用于存储更复杂、结构化的数据;或者将Map转成Record后打印 Map转Record字符串代码,还有在java中HashMap的话,也是用到了三方库Gson或者Jackson来实现对Map集合转化为json格式的。

分享
微博
QQ
微信
回复
2024-12-27 17:20:33
相关问题
HarmonyOS 数据转换问题
125浏览 • 1回复 待解决
HarmonyOS json数据如何转成map
1137浏览 • 1回复 待解决
学java的好不好转
9067浏览 • 2回复 待解决
HarmonyOS 数据强制转换问题
138浏览 • 1回复 待解决
HarmonyOS LazyForEach多层数据性能卡顿
166浏览 • 1回复 待解决
HarmonyOS SM2数据签名
97浏览 • 1回复 待解决
HarmonyOS Object怎么转换map
160浏览 • 1回复 待解决
HarmonyOS 各类常见数据转换
100浏览 • 1回复 待解决
HarmonyOS 请问如何把map转换为jsonstring
133浏览 • 1回复 待解决
Map类型怎么转换成Json string
2389浏览 • 1回复 待解决
HarmonyOS 摘要数据转换16进制字符串
83浏览 • 1回复 待解决
HarmonyOS rcp网络请求返回数据null
189浏览 • 1回复 待解决