如何在Scala中解析JSON数据?

塔伦·哈内贾(Tarun khaneja)

我是Scala的新手。我想在scala中解析JSON数据。

我想循环此数据,并在每次迭代中从中提取数据id,v,q,并t从值中提取数据

我正在使用以下代码将其解析为JSON

import scala.util.parsing.json._

val data =
  """
{
  "timestamp":
  1518501114949
  , "values":
  [
  {
    "id":
    "abc"
    , "v":
    0
    , "q":
    true
    , "t":
    1518501114487
  }
  ,
  {
    "id":
    "xyz"
    , "v":
    15
    , "q":
    true
    , "t":
    1518501114494
  }
  ]
}
"""

val parsed = JSON.parseFull(data)

我得到如下输出

 Some(Map(timestamp -> 1.518501114949E12, values -> List(Map(id -> abc, v -> 0.0, q -> true, t -> 1.518501114487E12), Map(id -> xyz, v -> 15.0, q -> true, t -> 1.518501114494E12), Map(id -> klm, v -> 12.6999998, q -> true, t -> 1.518501114487E12), Map(id -> 901.Hotmelt.PSA.0759_PSAM01_Vac, v -> 1.0, q -> true, t -> 1.518501114494E12))))

但我不知道如何循环和获取所有值

而且我不明白为什么时间戳会转换为E12值

侦察兵

问题在于parseFull返回一个选项,其中内部带有Any,因此您首先需要删除该选项:

使用下面的代码,您将保留这些值:

val listAsAny = parsed match {
  case Some(e:Map[Any,Any]) => e("values")
  case None => println("Failed.")
}

但是它们仍然是Any,因此您可以按以下方式进行转换:

val values = listAsAny.asInstanceOf[List[Map[String, Any]]]

现在,值是具有以下值的地图列表,您可以像使用常规列表一样在内部获取值

List(Map(id -> abc, v -> 0.0, q -> true, t -> 1.518501114487E12), Map(id -> xyz, v -> 15.0, q -> true, t -> 1.518501114494E12))

例如,要检索ID,您可以执行以下操作:

values.map(_("id"))

结果将是:

List(abc, xyz)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章