如何在json4s中提取列表和映射

时间:2018-08-19 18:19:02

标签: json scala json4s

我是Scala的新手,不知道如何使用json4s处理这个Json:

在解析json并通过以下方式提取以下json后:

contas.Add(new ContaInfo { Id = ..., IsString = ..., Instruction = ...});

我有一个像这样的杰森:

val data = json \\ "someKey"

将其打印到控制台,它返回:

[{"Id":14706061,
   "Rcvr":1,
    "HasSig":true,
    "Sig":80},
 {"Id":3425490,
  "Rcvr":1,
  "HasSig":false,
  "Sig": 80}]

因此,在那之后我使用了:

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)

但是我不知道如何从列表的每个位置提取每个地图。

我也尝试提取到一个案例类,但是我有0个条目:

List(Map(Id -> 14706061, Rcvr -> 1, HasSig -> true, Sig -> 80), Map(Id -> 3425490, Rcvr -> 1, HasSig -> false, Sig -> 80))

预先感谢您的帮助

PD。如果我分配:

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]

dataList(带有getClass)的类型是:class scala.collection.immutable。$ colon $ colon

PD2。解决方案

之后:

val dataList = data.values

我放:

val data = json \\ "someKey" val dataList = data.extract[JArray]

它返回一个迭代数组及其Maps,因此已固定。

经过检查:

val examples = dataList.values

println("number of elements: " + examples.length)

感谢您抽出宝贵的时间阅读。

2 个答案:

答案 0 :(得分:0)

希望下面的代码有帮助。

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"))}

答案 1 :(得分:0)

如果要提取到案例类而不是地图中,则提取的正确类型是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]]