我有一個 JSON 字串,其中包含以下文本:
[ {"origin": "24u","name": "","id": "itcobtpbtc","value": "n"},
{"origin": "24u","name": "","id": "offent","value": "oui"},
{"origin": "24u","name": "","id": "network","value": "btip"},
{"origin": "24u","name": "","id": "modpbx","value": "vide"},
{"origin": "24u","name": "","id": "egtplg","value": "1"},
{"origin": "24u","name": "","id": "zipbxcent","value": "non"},
{"origin": "24u","name": "","id": "typpbx","value": "pabx"},
{"origin": "24u","name": "","id": "egttyp","value": "gtr"},
{"origin": "24u","name": "","id": "egtval","value": "240"},
{"origin": "24u","name": "","id": "egtunt","value": "mn"},
{"origin": "24u","name": "","id": "codec","value": "g71120ms"},
{"origin": "24u","name": "","id": "modifseqsda","value": "non"},
{"origin": "24u","name": "","id": "infra_mode_ha_site","value": "non"},
{"origin": "24u","name": "","id": "numndi","value": "0238300385"},
{"origin": "24u","name": "","id": "nbcanout","value": "0"},
{"origin": "24u","name": "","id": "dbdrtc","value": "non"},
{"origin": "24u","name": "","id": "egtcod","value": "s2"},
{"origin": "24u","name": "","id": "numprtclp","value": "0044lfv4"},
{"origin": "24u","name": "","id": "egtlib","value": "gtr 4h s2 lundi au samedi 8h a 18h "},
{"origin": "24u","name": "","id": "dpmcible","value": "salto"},
{"origin": "24u","name": "","id": "nbcanin","value": "0"},
{"origin": "24u","name": "","id": "nbcan","value": "4"},
{"origin": "24u","name": "","id": "nomsit","value": "foyer hebergement"},
{"origin": "24u","name": "","id": "integrateur","value": "orange"}
]
我想檢索 id 等于特定值的行的值,例如,如果我正在尋找 id="offent",則回傳的值應該是“oui”。
我是 scala 的新手,我正在尋找一個可以在不使用本機 java 代碼的情況下輕松實作這一目標的庫。
uj5u.com熱心網友回復:
你可以使用值得信賴的org.json,
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>latest</version>
</dependency>
而不是在代碼中:
val json =
"""
|[ {"origin": "24u","name": "","id": "itcobtpbtc","value": "n"},
| {"origin": "24u","name": "","id": "offent","value": "oui"},
| {"origin": "24u","name": "","id": "network","value": "btip"},
| {"origin": "24u","name": "","id": "modpbx","value": "vide"},
| {"origin": "24u","name": "","id": "egtplg","value": "1"},
| {"origin": "24u","name": "","id": "zipbxcent","value": "non"},
| {"origin": "24u","name": "","id": "typpbx","value": "pabx"},
| {"origin": "24u","name": "","id": "egttyp","value": "gtr"},
| {"origin": "24u","name": "","id": "egtval","value": "240"},
| {"origin": "24u","name": "","id": "egtunt","value": "mn"},
| {"origin": "24u","name": "","id": "codec","value": "g71120ms"},
| {"origin": "24u","name": "","id": "modifseqsda","value": "non"},
| {"origin": "24u","name": "","id": "infra_mode_ha_site","value": "non"},
| {"origin": "24u","name": "","id": "numndi","value": "0238300385"},
| {"origin": "24u","name": "","id": "nbcanout","value": "0"},
| {"origin": "24u","name": "","id": "dbdrtc","value": "non"},
| {"origin": "24u","name": "","id": "egtcod","value": "s2"},
| {"origin": "24u","name": "","id": "numprtclp","value": "0044lfv4"},
| {"origin": "24u","name": "","id": "egtlib","value": "gtr 4h s2 lundi au samedi 8h a 18h "},
| {"origin": "24u","name": "","id": "dpmcible","value": "salto"},
| {"origin": "24u","name": "","id": "nbcanin","value": "0"},
| {"origin": "24u","name": "","id": "nbcan","value": "4"},
| {"origin": "24u","name": "","id": "nomsit","value": "foyer hebergement"},
| {"origin": "24u","name": "","id": "integrateur","value": "orange"}
|]""".stripMargin
case class YourModel(origin:String, name:String,id:String, value:String)
import collection.JavaConversions._
val jsonArray: JSONArray = new JSONArray(json)
val yourMap = jsonArray.toSeq.map(x=>{
val jsonObject = new JSONObject(x.toString)
YourModel(
jsonObject.get("origin").toString,
jsonObject.get("name").toString,
jsonObject.get("id").toString,
jsonObject.get("value").toString)
}).map(x=>x.id -> x).toMap
println(yourMap.get("offent").get.value)
uj5u.com熱心網友回復:
為了方便地在 Scala 中使用 JSON,您可以使用第戎庫。
- 將依賴項添加到您的
build.sbt:
libraryDependency = "me.vican.jorge" %% "dijon" % "0.6.0" // Use %%% instead of %% for Scala.js
- 通過添加 import 子句打開對動態型別的支持:
import scala.language.dynamics._
或通過設定 scala 編譯器選項:
scalacOptions = "-language:dynamics"
dijon為主要功能添加包物件的匯入:
import dijon._
- 使用以下代碼決議、查找和列印值:
val str =
"""[
| {"origin": "24u","name": "","id": "itcobtpbtc","value": "n"},
| {"origin": "24u","name": "","id": "offent","value": "oui"},
| {"origin": "24u","name": "","id": "network","value": "btip"},
| {"origin": "24u","name": "","id": "modpbx","value": "vide"},
| {"origin": "24u","name": "","id": "egtplg","value": "1"},
| {"origin": "24u","name": "","id": "zipbxcent","value": "non"},
| {"origin": "24u","name": "","id": "typpbx","value": "pabx"},
| {"origin": "24u","name": "","id": "egttyp","value": "gtr"},
| {"origin": "24u","name": "","id": "egtval","value": "240"},
| {"origin": "24u","name": "","id": "egtunt","value": "mn"},
| {"origin": "24u","name": "","id": "codec","value": "g71120ms"},
| {"origin": "24u","name": "","id": "modifseqsda","value": "non"},
| {"origin": "24u","name": "","id": "infra_mode_ha_site","value": "non"},
| {"origin": "24u","name": "","id": "numndi","value": "0238300385"},
| {"origin": "24u","name": "","id": "nbcanout","value": "0"},
| {"origin": "24u","name": "","id": "dbdrtc","value": "non"},
| {"origin": "24u","name": "","id": "egtcod","value": "s2"},
| {"origin": "24u","name": "","id": "numprtclp","value": "0044lfv4"},
| {"origin": "24u","name": "","id": "egtlib","value": "gtr 4h s2 lundi au samedi 8h a 18h "},
| {"origin": "24u","name": "","id": "dpmcible","value": "salto"},
| {"origin": "24u","name": "","id": "nbcanin","value": "0"},
| {"origin": "24u","name": "","id": "nbcan","value": "4"},
| {"origin": "24u","name": "","id": "nomsit","value": "foyer hebergement"},
| {"origin": "24u","name": "","id": "integrateur","value": "orange"}
|]""".stripMargin
val json = parse(str)
println(json.toSeq.collect { case x if x.id.asString.contains("offent") => x.value })
- (可選)匯入
jsoniter-scala-core擴展功能的包物件,例如掃描 JSON 陣列java.io.InputStream并處理決議的值,而不將所有這些值保存在記憶體中:
import com.github.plokhotnyuk.jsoniter_scala.core._
val in: java.io.InputStream = new java.io.ByteArrayInputStream(str.getBytes)
scanJsonArrayFromStream[SomeJson](in) { x =>
if (x.id.asString.contains("offent")) {
println(x.value)
}
true
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478727.html
上一篇:具有回應功能的拆分滑塊
