从 Scala 中的 json 数组获取数据

Getting data from json array in scala

我刚刚开始研究 Scala。我有以下 json 数组:

[
  {
     "id": "1",
    "formatType": "text",
    "value": "bgyufcie huis huids hufhsduhfsl hd"
  },
  {
    "id": "2",
    "formatType": "text size",
    "value": 12
  },
  {
    "id": "3",
    "formatType": "text alignment",
    "value" : "right"
  }
]

我正在尝试根据 id 从该数组中检索 json。例如,如果 id 是 2 那么我想检索 following

 {
        "id": "2",
        "formatType": "text size",
        "value": 12
      }

以此类推其他 id。我写了一个比较 id 和 return me json 的代码,如下所示。

val getid = jsonString.parseJson match {
      case JsArray(elements) => elements.map(x => if(x.asJsObject().getFields("Id")(0).toString().replace("\"", "") == key) x)
    }

当 json 数组中只有一个 json 时,这段代码工作正常。但是当我有多个 json 和上面显示的 id 时,这段代码只比较最后一条记录。也就是说,在这种情况下,它仅将数据与 id 3 进行比较。它不与 id 1 和 id 2 进行比较,因此我无法获得所需的结果。我尝试在这里使用 for each 但这对我不起作用。 for each 以字符形式打印完整数据。如何检查我的 json 数组中的所有记录并匹配 id 和 return 它?

我同意关于不问多个问题并查看现有答案(并接受正确答案!)的评论。

但是在这种特殊情况下,您只需要使用 find 而不是 map:

val getid = jsonString.parseJson match {
  case JsArray(elements) =>
    elements.find(_.asJsObject().getFields("Id")(0).toString().replace("\"", "") == key)
  case _ =>
    None
}

如果未找到 id 或 JSON 不是 JsArray,这将 return None,否则将 return Some(element)

更一般地说,与其处理原始 JSON 对象,我建议使用将整个 JSON 转换为 Scala 对象然后处理这些 Scala 对象的库。