当前位置: 首页 > 知识库问答 >
问题:

如何将scala.some转换为scala.mutable.地图?

沃阳飙
2023-03-14

我正在尝试编写代码来掩盖嵌套的json字段。

 def maskRecursively(map :mutable.Map[String,Object]):mutable.Map[String,Object] ={
val maskColumns = PII_Data.getPIIData()
for((k,v) <- map){
  if(v.isInstanceOf[Map[String,Object]]){
    maskRecursively(map.get(k).asInstanceOf[mutable.Map[String,Object]])
  }else if(v.isInstanceOf[List[Object]]) {

  } else {
    if(maskColumns.contains(k)){map+=(k->"*****")}
  }

}


map }

从...调用此方法。

val mapper = new ObjectMapper()
    mapper.registerModule(DefaultScalaModule)
    val result = mapper.readValue(jsonStr, classOf[ java.util.Map[String,Object] ])
    import scala.collection.JavaConverters._
    val myScalaMap = result.asScala
    maskRecursively(result.asScala)

我在尝试迭代嵌套的json对象时出错...

无法转换scala类型的值。有些要键入scala.collection.mutable.Map

如何以这种方式递归复杂的嵌套json对象?

共有1个答案

黄弘新
2023-03-14

你的错误是

if(v.isInstanceOf[Map[String,Object]]){
    maskRecursively(map.get(k).asInstanceOf[mutable.Map[String,Object]])

有几个问题:

  1. 检查v是否是Map的实例,然后尝试将其强制转换为mutable。地图。它们在技术上是不同的类型(可变与不变)

如果执行isInstanceOf/asInstanceOf组合,请确保每次的操作数相同。你已经有了v,所以你不需要从地图上再查一次。并确保在两个instanceOf调用上使用相同的类型。

通过将其更改为

if(v.isInstanceOf[mutable.Map[_, _]]){
    maskRecursively(v.asInstanceOf[mutable.Map[String,Object]])
 类似资料:
  • 我有这样一个代码: 你能帮我完成代码库吗?

  • 问题内容: 最近我谈话有什么将要转换的最佳方式是同事,以在Java中,如果有这样做的任何特殊利益。 我想知道最佳转换方法,如果有人可以指导我,我将不胜感激。 这是个好方法吗? 问题答案: 当然,假设每个Item都有一个返回正确类型的键的方法。

  • 问题内容: 我有使用地址的应用程序(它存储它们的时间很长),因此它只了解地址。 可以将地址转换为with 吗? 问题答案: 尽管IPv4地址范围具有等效的IPv6,但是您不能将所有IPv6地址都转换为IPv4-IPv6地址比IPv4地址更多。 解决此问题的唯一明智的方法是更新您的应用程序,以便能够理解和存储IPv6地址。

  • 我在我的颤振应用程序中使用包dio。从我的api问题中获取响应<代码>响应。数据获取类型

  • 我知道我应该使用函数,但我不知道如何使用,也没有看到它的任何示例。

  • 问题内容: 我具有以下功能,可以将PDF转换为一系列图像(每页一个图像): 这可以很好地工作,性能并没有那么快,但这并不重要。我的问题与内存消耗有关。假设我要转换一个较长的PDF(Apple的10-Q,长达51页): 到最后一页的末尾,内存使用量一直增加到〜11GB! 我还注意到一些注意事项: 当我通过Instruments运行此程序时,它出乎意料地显示没有泄漏。两个大记忆猪是和。它们似乎没有在两