播放JSON解析并提取没有密钥路径的元素



我有一个JSON,看起来像这样,是的,JSON是一个有效的格式。

[2,
"19223201",
"BootNotification",
{
"reason": "PowerUp",
"chargingStation": {
"model": "SingleSocketCharger",
"vendorName": "VendorX"
}
}
]

我正在使用Play框架的JSON库,我想了解如何解析第三行并将BootNotification值提取为字符串。

如果它有一个键,我可以使用该键遍历JSON并获得相应的值,但这里的情况并非如此。我也不可能像上面的例子那样逐行加载并从行号3推断。

关于我该怎么做,有什么建议吗?

我想,在Ammonite上尝试了所有这些之后,我找到了一种方法。以下是我可以做的:

@ val input: JsValue = Json.parse("""[2,"12345678","BNR",{"reason":"PowerUp"}]""") 
input: JsValue = JsArray(ArrayBuffer(JsNumber(2), JsString("12345678"), JsString("BNR"), JsObject(Map("reason" -> JsString("PowerUp")))))

通过解析JSON,我得到了一个很好的数组,并且我知道我总是期望数组中只有4个元素,所以明确地寻找具有数组索引的元素是我所需要的。因此,为了获得位置3的文本,我可以做以下操作:

@ (input  2) 
res2: JsLookupResult = JsDefined(JsString("BNR"))
@ (input  2).toOption 
res3: Option[JsValue] = Some(JsString("BNR"))
@ (input  2).toOption.isDefined 
res4: Boolean = true

最新更新