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
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS ArkTS和c++ map数据结构转换最佳实践
177浏览 • 1回复 待解决
HarmonyOS 数据转换问题
125浏览 • 1回复 待解决
HarmonyOS json数据如何转成map
1137浏览 • 1回复 待解决
学java的好不好转
9067浏览 • 2回复 待解决
HarmonyOS 数据强制转换问题
138浏览 • 1回复 待解决
HarmonyOS LazyForEach多层级数据性能卡顿
166浏览 • 1回复 待解决
HarmonyOS @Observed 监听多层数据结构失败
223浏览 • 1回复 待解决
HarmonyOS SM2数据签名
97浏览 • 1回复 待解决
HarmonyOS Object怎么转换成map
160浏览 • 1回复 待解决
如何在C层获取一个hashmap或者自定义对象数据
2202浏览 • 0回复 待解决
HarmonyOS 各类常见数据的转换
100浏览 • 1回复 待解决
HarmonyOS router传参,结构包含多层时,内部属性类型为undefined
125浏览 • 1回复 待解决
HarmonyOS 请问如何把map转换为jsonstring
133浏览 • 1回复 待解决
HarmonyOS 后台数据结构不统一 返回类型不好定义
150浏览 • 1回复 待解决
HarmonyOS 3.1/4 版本 多层json字符串如何解析?不想要一层对象挨个转换那种
2643浏览 • 1回复 待解决
HarmonyOS 数据类型定义Record与map使用选择
354浏览 • 1回复 待解决
HarmonyOS PersistentStorage 持久化的数据重启应用后数据为空
133浏览 • 1回复 待解决
HarmonyOS Native层取到音频或图片数据流怎么传到ArkTS层?
114浏览 • 1回复 待解决
HarmonyOS native层从C++到JS层传图片数据,过大失败
527浏览 • 1回复 待解决
Map类型怎么转换成Json string
2389浏览 • 1回复 待解决
HarmonyOS 摘要数据转换16进制字符串
83浏览 • 1回复 待解决
HarmonyOS当开发程序或者分析用户数据库内容时,如何查看加密数据库的内容
652浏览 • 1回复 待解决
如何将datashare类型的数据转换为internal类型的数据?
2411浏览 • 0回复 待解决
HarmonyOS rcp网络请求返回数据为null
189浏览 • 1回复 待解决
从两者的定义上看,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格式的。