【问题标题】:Filtering json-map objects by fields value, which is Some(value)按字段值过滤 json-map 对象,即 Some(value)
【发布时间】:2018-06-07 08:11:58
【问题描述】:

有一个超过 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 按预期返回 "Some(-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""Some(-1)"Some("-1")

【问题讨论】:

    标签: json scala types scala-collections


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我没想到会在那里得到一个整数值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2019-04-15
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    相关资源
    最近更新 更多