我是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] 删除。
我来说两句