从 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 对象的库。
我刚刚开始研究 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 对象的库。