json - Scala 获取地图对象上特定数据类型的 JSON 值
问题描述
使用杰克逊库,我从文件中读取 json 数据(文件的每一行都是一个 JSON 对象),然后将其解析为String和Any的映射对象。我的目标是将指定的键(id 和文本)保存到集合中。
val input = scala.io.Source.fromFile("data.json").getLines()
val mapper = new ObjectMapper() with DefaultScalaModule
val data_collection = mutable.HashMap.empty[Int, String]
for (i <- input){
val parsedJson = mapper.readValue[Map[String, Any]](i)
data_collection.put(
parsedJson.get("id"),
parsedJson.get("text")
)
但是由于parsedJson映射中的值具有Any类型,获取一些像id和text这样的键,它返回Some(value)而不仅仅是具有适当类型的值。我希望id键的值是整数,文本的值是字符串。运行代码我得到了错误:
Error:(31, 23) type mismatch;
found : Option[Any]
required: Int
parsedJson.get("id"),
以下是文件中的 JSON 数据示例:
{"text": "Hello How are you", "id": 1}
在 Scala 中是否可以将 id 值解析为 Int 并将文本值解析为 String,或者至少将 Some(value) 转换为 Int 或 String 类型的值?
解决方案
试试下面的代码:
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import
com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
val input = scala.io.Source.fromFile("data.json").getLines()
val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
val obj = mapper.readValue[Map[String, Any]](input)
val data_collection = mutable.HashMap.empty[Int, String]
for (i <- c) {
data_collection.put(
obj.get("id").fold(0)(_.toString.toInt),
obj.get("text").fold("")(_.toString)
)
}
println(data_collection) // Map(1 -> Hello How are you)
推荐阅读
- git - 用于基于新发布标签触发詹金斯的 groovy 作业 DSL
- javascript - 为什么验证后输入值未定义?
- android - 离子本地通知声音不适用于 Android 8.0
- javascript - 使用 jQuery 切换导航栏,如果用户使用导航栏媒体查询停止工作
- button - 如何在 IconButton 上产生圆形波纹效果?
- arrays - 将 VBA 整数数组传递给 c# DLL int 数组
- string - 如何从声明性宏中返回新字符串?
- reactjs - 在 React 中使用 Jest 模拟 Axios - 未调用模拟函数
- mysql - SQL / MYSQL 如果一个或多个匹配则弹出整个集合
- android - Android - React-native:输出:错误:找不到资源样式/Theme.AppCompat.Light.NoActionBar