在Scala中解析JSON并迭代对象

4

比如,给定以下JSON字符串:

[{"id": "user1", "password": "ps1"},{"id": "user2", "password": "ps2"},{"id": "user3", "password": "ps3"}]

什么是在Scala中解析它并遍历每个结果并适当分析它的最佳和最优化方法?

谢谢。

5个回答

9
使用Lift-JSON:
import net.liftweb.json.JsonParser._
import net.liftweb.json.DefaultFormats
val jsonString = //你的jsonString....
case class Credential (id:String, password:String)
implicit val formats = DefaultFormats val credentials = parse(jsonString).extract[List[Credential]]
credentials foreach { cred => println(cred.id + " " + cred.password) }
这里有详细的解释:http://www.assembla.com/spaces/liftweb/wiki/JSON_Support

通过将解析后的JSON对象提取到其他对象中,这是一个不错的概念。 例如,如果字段不匹配,或者JSON中的键无法与我的凭据对象中的键匹配,那么我会得到一个错误,对吧? - José P. Airosa
是的,你可以在解析方法周围加上 try catch。我喜欢它,因为它只有在你的 JSON 字符串结构正确时才能正常工作。 - Tanjona

6

谢谢。非常完整的文章,正好符合我的需求。 - José P. Airosa

2

已经看过了,但是我在 Github 仓库上找到了更多信息:https://github.com/lift/lift/blob/master/framework/lift-base/lift-json/README.md。使用 LINQ :) - José P. Airosa

1

除了lift-json和上面提到的类型类方法,我还知道spray-json(PEG解析器)、twitter的json库(基于《Scala编程》一书中的代码)以及blueeyes中的json库。当然还有其他的!

我建议看一下Jackson,它是一个成熟且功能丰富的Java JSON解析库。

Jackson有一个“官方”的scala扩展:jackson-module-scala,还有另一个Jerkson


你是否发现使用Jackson比Lift专有的JSON解析算法更高效? - José P. Airosa
我还没有进行基准测试。然而,正确性和长期支持是优先考虑的,除了Jackson之外的一些库在这方面缺乏。不过,其他人进行的基准测试显示Jackson的性能非常出色。 - srnm

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接