json - 如何在scala中解析Json
问题描述
我想知道如何解析 JSON
我正在尝试在 scala 中解析 json。
但我不知道如何解析
有没有更好的办法?
键从 1 开始顺序编号
我使用circe库...
谢谢
{
"1": {
"name": "hoge",
"num": "60"
},
"2": {
"name": "huga",
"num": "100"
},
"3": {
"name": "hogehuga",
"num": "10"
},
}
解决方案
假设您有这样的字符串(请注意,我已经删除了结尾的逗号,它不是有效的 JSON):
val doc = """
{
"1": {
"name": "hoge",
"num": "60"
},
"2": {
"name": "huga",
"num": "100"
},
"3": {
"name": "hogehuga",
"num": "10"
}
}
"""
您可以像这样使用 circe 解析它(假设您已将 circe-jawn 模块添加到构建配置中):
scala> io.circe.jawn.parse(doc)
res1: Either[io.circe.ParsingFailure,io.circe.Json] =
Right({
"1" : {
"name" : "hoge",
"num" : "60"
},
"2" : {
"name" : "huga",
"num" : "100"
},
"3" : {
"name" : "hogehuga",
"num" : "10"
}
})
在 circe(和其他一些 JSON 库)中,“解析”一词用于指代将字符串转换为 JSON 表示形式(在本例中io.circe.Json
)。您可能需要其他东西,例如案例类的映射。这种到非 JSON 相关的 Scala 类型的转换称为解码,可能如下所示:
scala> import io.circe.generic.auto._
import io.circe.generic.auto._
scala> case class Item(name: String, num: Int)
defined class Item
scala> io.circe.jawn.decode[Map[Int, Item]](doc)
res2: Either[io.circe.Error,Map[Int,Item]] = Right(Map(1 -> Item(hoge,60), 2 -> Item(huga,100), 3 -> Item(hogehuga,10)))
您当然可以将此 JSON 解码为许多不同的 Scala 表示形式——如果这对您不起作用,请扩展您的问题,我会更新答案。
推荐阅读
- javascript - 发布一个包含许多字段和 JS var 的表单
- authorization - 金字塔:用户和组织的权限
- linux - 如何使用 rsyslog 仅将特定文件发送到远程服务器
- python - 使用 lambda 过滤字符串列表
- java - JUnit+Mockito 或 RestAssured
- python - 如何在交叉表熊猫中获得总计?
- android - react native Modal前面弹出alert会挂掉ios中的应用
- angular - Angular Material,使用 mat-card-avatar 没有卡片
- java - 如何在 Java 中使用 Dagger2 在 @ModuleB 中包含来自 @ModuleA 的依赖项
- javascript - 我想将一个字符串分成两个变量