如何在scala中解析Json

如何在scala中解析Json,json,scala,circe,Json,Scala,Circe,我想知道如何解析JSON 我试图在scala中解析json 但我不知道如何解析 还有更好的办法吗 密钥从1开始按顺序编号 我使用circe图书馆 谢谢 { "1": { "name": "hoge", "num": "60" }, "2": { "name": "huga", "num": "100" }, "3": { "name": "hogehuga", "num": "10" }, } 假设您有这样一个字符串(请注

我想知道如何解析JSON

我试图在scala中解析json

但我不知道如何解析

还有更好的办法吗

密钥从1开始按顺序编号

我使用circe图书馆

谢谢

{
  "1": {
    "name": "hoge",
    "num": "60"
  },
  "2": {
    "name": "huga",
    "num": "100"
  },
  "3": {
    "name": "hogehuga",
    "num": "10"
  },
}

假设您有这样一个字符串(请注意,我已经删除了后面的逗号,它不是有效的JSON):

您可以像这样使用circe对其进行解析(假设您已将circe jawn模块添加到构建配置中):

在circe(和其他一些JSON库)中,“parse”一词用于表示将字符串转换为JSON表示(在本例中为
io.circe.JSON
)。很可能您还需要其他东西,比如案例类的映射。在circe中,这种到与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表示形式,如果这对您不起作用,请展开您的问题,我将更新答案。

请共享您的代码。如果您没有添加代码,我们无法在代码中找到错误。您可以粘贴您的电路代码吗?您正在尝试将其解析为case类吗?如果是这样的话,Scala不支持将数字作为属性名,因此您的case类应该像
case class Foo(`1`:Int)
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"
  }
})
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)))