从scala中的json数组获取数据

从scala中的json数组获取数据,scala,spray-json,Scala,Spray Json,我刚开始在scala上工作。我有以下json数组: [ { "id": "1", "formatType": "text", "value": "bgyufcie huis huids hufhsduhfsl hd" }, { "id": "2", "formatType&q

我刚开始在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,那么我想检索以下内容

 {
        "id": "2",
        "formatType": "text size",
        "value": 12
      }
其他身份证也是如此。我已经编写了一段代码,比较id并返回json,如下所示

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

当在json数组中我只有一个json时,这段代码运行良好。但当我有多个id为的json时,如上图所示,这段代码只比较最后一条记录。也就是说,在这种情况下,它只是比较id为3的数据。它不能与id 1和id 2进行比较,因此我无法获得期望的结果。我试着在这里使用每一个,但这对我不起作用。对于每个,打印字符的完整数据。如何检查json数组中的所有记录并匹配id并返回它?

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

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

val getid = jsonString.parseJson match {
  case JsArray(elements) =>
    elements.find(_.asJsObject().getFields("Id")(0).toString().replace("\"", "") == key)
  case _ =>
    None
}
如果未找到
id
或JSON不是
JsArray
,则返回
None
,否则返回
Some(元素)


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

Hello@Lozy,欢迎使用Stackoverflow。我注意到你已经第三次问同样的问题了。在创建新帐户和复制问题之前,请编辑并改进您的问题。这让每个试图帮助你的人都感到沮丧。另外两个问题是:不,我已经前进了。我找到了一个解决办法,继续前进,然后停在了别的地方。同一种语言用于提供问题的背景信息,这与使用Scala解析JSON的实际问题有关。你可以放心,在Stackoverflow或其他网站上有足够的答案,所以这类问题很可能会吸引更多的反对票,或者被标记为重复。好吧,公平点。我发现每一个问题都略有不同。但我相信其他人不会像我现在这样仔细阅读,可能会忽视或否决这个问题。从我个人的角度来看,一旦有人创建了一个新帐户,我就已经开始怀疑了。我真的是想帮助你,让别人回答你的问题。此外,如果你在另一篇文章中发现一个有帮助的答案(比如ForeverLearner的答案),那么接受这个答案也是一个很好的练习。