按字段值过滤json-map对象,即Some(value)

时间:2017-12-26 13:31:56

标签: json scala types scala-collections

有一个超过10000行的json文件。您可以在下面看到数据格式:

{"id":1,"child_id":1822925634,"parent_id":-1,"name":"victor"}
{"id":2,"child_id":1266710134,"parent_id":25,"name":"victor"}
{"id":3,"child_id":572534000,"parent_id":-1,"name":"simone"}
.
.
.
{"id":10575,"child_id":572534781,"parent_id":135,"name":"victor"}

我想过滤 parent_id 等于 -1 的所有行。

首先,我的代码读取文件内容,然后按换行符拆分。

val file = new File("./myFile.json")
val jsonContent = FileUtils.readFileToString(file)
JSON.globalNumberParser = {input : String => Integer.parseInt(input)}
val jsonArray = jsonContent.split("\n").map(x=>JSON.parseFull(x).get.asInstanceOf[Map[String,String]])

到目前为止,我有一个带有4个键值对的地图对象(到目前为止一切正常)。要进行一点调试, temp 会按预期返回"某些(-1)"

val temp = jsonArray(2).get("parent_id")

现在,我想根据 parent_id

过滤 jsonArray
val selectedRows = jsonArray.filter(_.get("parent_id")=="-1").map(_.get("name"))

但它返回一个空的地图对象。问题是方程式不满意。我试过了(" parent_id")== " -1" "一些(-1)" 一些(" -1")

1 个答案:

答案 0 :(得分:1)

Map.get会返回Option,因此您的表达式_.get("parent_id")=="-1"始终为false

您需要将其转换为_.get("parent_id") == Some(-1)