HarmonyOS 鸿蒙Next Map转string,用set存值就取不出来

发布于 1周前 作者 yuanlaile 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Map转string,用set存值就取不出来 代码如下,用set往map里存值,使用JSON转不出来,这是我写的不对,还是官方的bug ?

@Entry
@Component
struct Test {
  private map: Map<string, string> = new Map()
  private map_: Map<string, string> = new Map()
  private map__: Record<string, string> = {'1': "bb"}

  aboutToAppear(): void {
    this.map['1'] = 'aa'
    this.map_.set('1', 'cc')
  }

  build() {
    Column() {
      Text(JSON.stringify(this.map))
      Text(JSON.stringify(this.map_))
      Text(JSON.stringify(this.map__))
    }
  }
}

在适配指导中发现了 Object.fromEntries,先把map转为object ,但是使用的时候会报错~


更多关于HarmonyOS 鸿蒙Next Map转string,用set存值就取不出来的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

我也遇到过这个问题,有些固有类型,可能是没办法转为字符串的,你可以自己写个类测试一下stringify能不能正常使用。

更多关于HarmonyOS 鸿蒙Next Map转string,用set存值就取不出来的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


木元君,我上面的例子就是用JSON.stringify解析的,

所以,看你的需求了。对于这种固有类型、或是继承自固有类型,都有可能出现这种情况,感觉好像与类的体量、是否原生类有关。对于这种,如果为了看数据,建议用foreach遍历。如果是为了看类有哪些属性,object.keys。还有个问题,就是如果stringify转出来的字符串太大,也不会是详细内容,会得到object。这些都是我之前遇到的,希望可以给你提供解决思路。

好的好的,了解了,谢谢,

用set保存只能用get取,用[]保存也只能用[]取。

参考:https://developer.huawei.com/consumer/cn/blog/topic/03153075705706030

老哥!不是取出来!是把它转成string类型,用set存,得到的是空,其他方式存就好使,

map转数组,再json

console.log(`map:`, JSON.stringify(Array.from(map.entries() || [])));

这是输出的内容

cke_516.png

在HarmonyOS中,Map转String后,使用Set存储值可能导致数据无法正确取出。这是因为Map转String后,数据格式可能发生变化,导致Set无法正确解析和存储。具体原因可能是Map转String后的字符串格式不符合Set的存储要求,或者Set在存储过程中对数据进行了某种处理,导致数据丢失或无法识别。

解决此问题的方法包括:

  1. 检查Map转String的格式:确保Map转String后的字符串格式符合Set的存储要求。
  2. 使用合适的序列化方法:在Map转String时,使用合适的序列化方法,如JSON序列化,以确保数据格式一致。
  3. 直接存储Map对象:如果可能,直接存储Map对象,而不是将其转换为String,以避免转换过程中可能引入的问题。

在HarmonyOS(鸿蒙)中,如果你将Map转换为String并存储在Set中,随后无法取出,可能是因为Set存储的是对象的引用,而对象在转换过程中发生了变化。建议在存储前将Map转换为JSON字符串,确保数据一致性。例如:

Map<String, Object> map = new HashMap<>();
map.put("key", "value");
String jsonString = new Gson().toJson(map);
Set<String> set = new HashSet<>();
set.add(jsonString);

取出时再解析JSON字符串为Map:

String storedJson = set.iterator().next();
Map<String, Object> restoredMap = new Gson().fromJson(storedJson, new TypeToken<Map<String, Object>>() {}.getType());

这样可以确保数据的完整性和可恢复性。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!