如何提取json4s中的List和Map
How to extract List and Map in json4s
我是 Scala 的新手,不知道如何用 json4s 处理这个 Json:
解析 json 并提取以下 json 之后:
val data = json \ "someKey"
我有一个 Json 这样的:
[{"Id":14706061,
"Rcvr":1,
"HasSig":true,
"Sig":80},
{"Id":3425490,
"Rcvr":1,
"HasSig":false,
"Sig": 80}]
打印到控制台,returns:
JArray(List(JObject(List((Id,JInt(14706061)), (Rcvr,JInt(1)), (HasSig,JBool(true)), (Sig,JInt(80), Id,JInt(3425490)), (Rcvr,JInt(1)), (HasSig,JBool(false)), (Sig,JInt(80) ))
所以,之后我使用了:
println("show values: " + data.values)
并且有:
List(Map(Id -> 14706061, Rcvr -> 1, HasSig -> true, Sig -> 80), Map(Id -> 3425490, Rcvr -> 1, HasSig -> false, Sig -> 80))
但我不知道如何从列表的每个位置提取每个地图。
我也尝试提取到一个案例 class 但我有 0 个条目:
case class Example (Id: BigInt, Rcvr: Int, HasSig: Boolean, Sig: Int)
case class ExampleList (examples: List[Example])
implicit val formats = DefaultFormats.strict
val dataList = data.extract[ExampleList]
在此先感谢您的帮助
PD。如果我分配:
val dataList = data.values
dataList(带getClass)的类型是:class scala.collection.immutable.$colon$colon
PD2。解决方案
之后:
val data = json \ "someKey"
我输入:
val dataList = data.extract[JArray]
val examples = dataList.values
它 returns 一个可迭代的数组,它的映射是可迭代的,所以是固定的。
检查:
println("number of elements: " + examples.length)
和
println("show each item: " + examples.foreach(println))
感谢您抽空阅读。
希望以下代码对您有所帮助。
enter code here
val iList = List(Map("Id" -> 14706061, "Rcvr" -> 1, "HasSig" -> "true", "Sig" -> 80),
Map("Id" -> 3425490, "Rcvr" -> 1, "HasSig" -> false, "Sig" -> 80))
for(i <-0 until iList.size){val lMap = iList(i)println("Id: " + lMap("Id"))}
如果您想提取到 Case Class 而不是 Map,正确的提取类型是 List[Example]
,而不是 ExampleList
。
ExampleList
有一个属性 examples
,你的 json 没有。这就是为什么你得到一个空列表。
import org.json4s.native.JsonMethods._
import org.json4s._
implicit val formats = DefaultFormats
val str = """[{"Id":14706061,
"Rcvr":1,
"HasSig":true,
"Sig":80},
{"Id":3425490,
"Rcvr":1,
"HasSig":false,
"Sig": 80}]"""
case class Example (Id: BigInt, Rcvr: Int, HasSig: Boolean, Sig: Int)
val json = parse(str)
val examples = json.extract[List[Example]]
我是 Scala 的新手,不知道如何用 json4s 处理这个 Json:
解析 json 并提取以下 json 之后:
val data = json \ "someKey"
我有一个 Json 这样的:
[{"Id":14706061,
"Rcvr":1,
"HasSig":true,
"Sig":80},
{"Id":3425490,
"Rcvr":1,
"HasSig":false,
"Sig": 80}]
打印到控制台,returns:
JArray(List(JObject(List((Id,JInt(14706061)), (Rcvr,JInt(1)), (HasSig,JBool(true)), (Sig,JInt(80), Id,JInt(3425490)), (Rcvr,JInt(1)), (HasSig,JBool(false)), (Sig,JInt(80) ))
所以,之后我使用了:
println("show values: " + data.values)
并且有:
List(Map(Id -> 14706061, Rcvr -> 1, HasSig -> true, Sig -> 80), Map(Id -> 3425490, Rcvr -> 1, HasSig -> false, Sig -> 80))
但我不知道如何从列表的每个位置提取每个地图。
我也尝试提取到一个案例 class 但我有 0 个条目:
case class Example (Id: BigInt, Rcvr: Int, HasSig: Boolean, Sig: Int)
case class ExampleList (examples: List[Example])
implicit val formats = DefaultFormats.strict
val dataList = data.extract[ExampleList]
在此先感谢您的帮助
PD。如果我分配:
val dataList = data.values
dataList(带getClass)的类型是:class scala.collection.immutable.$colon$colon
PD2。解决方案
之后:
val data = json \ "someKey"
我输入:
val dataList = data.extract[JArray]
val examples = dataList.values
它 returns 一个可迭代的数组,它的映射是可迭代的,所以是固定的。
检查:
println("number of elements: " + examples.length)
和
println("show each item: " + examples.foreach(println))
感谢您抽空阅读。
希望以下代码对您有所帮助。
enter code here
val iList = List(Map("Id" -> 14706061, "Rcvr" -> 1, "HasSig" -> "true", "Sig" -> 80),
Map("Id" -> 3425490, "Rcvr" -> 1, "HasSig" -> false, "Sig" -> 80))
for(i <-0 until iList.size){val lMap = iList(i)println("Id: " + lMap("Id"))}
如果您想提取到 Case Class 而不是 Map,正确的提取类型是 List[Example]
,而不是 ExampleList
。
ExampleList
有一个属性 examples
,你的 json 没有。这就是为什么你得到一个空列表。
import org.json4s.native.JsonMethods._
import org.json4s._
implicit val formats = DefaultFormats
val str = """[{"Id":14706061,
"Rcvr":1,
"HasSig":true,
"Sig":80},
{"Id":3425490,
"Rcvr":1,
"HasSig":false,
"Sig": 80}]"""
case class Example (Id: BigInt, Rcvr: Int, HasSig: Boolean, Sig: Int)
val json = parse(str)
val examples = json.extract[List[Example]]