正如@Tyth指出的,我們可能想重新考慮你的json的結構。也許是這樣的:
{ [ { "key" : "key1", "value" : "a" }, { "key" : "key2", "value" : "1" }, .....
會更好......
然而,要回答你的問題,你可以這樣做:
import play.api.libs.json._
val a = """{
| "key1": "a",
| "key2": 1,
| "key3": null,
| "key4": 0.56 }
| """
val b = Json.parse(a)
val keys = b.as[JsObject].keys
而且你可以打印你的鑰匙
scala> keys.foreach { k => println(b \ k) }
"a"
1
null
0.56
或者然後轉成JsValue地圖
scala> keys.map { k => k -> (b \ k) }.toMap
res4: scala.collection.immutable.Map[String,play.api.libs.json.JsValue] = Map(key1 -> "a", key2 -> 1, key3 -> null, key4 -> 0.56)
或字符串:
scala> keys.map { k => k -> (b \ k).toString }.toMap
res3: scala.collection.immutable.Map[String,String] = Map(key1 -> "a", key2 -> 1, key3 -> null, key4 -> 0.56)
編輯(每擴充評論):
scala> JsObject(b.as[JsObject].fields :+ ("key99" -> JsString("zzzz")))
res7: play.api.libs.json.JsObject = {"key1":"a","key2":1,"key3":null,"key4":0.56,"key99":"zzzz"}
你想要做你的數據,考慮到你不知道什麼做什麼鍵或它可以包含什麼類型的值?因爲無論如何你需要將它序列化爲JSON,看起來Json變壓器是你的事情。 https://www.playframework.com/documentation/2.4.x/ScalaJsonTransformers – Tyth
我正在構建一個應用程序,該應用程序目前採用類似於上述的HTTP請求,將其轉換爲Scala對象,並使用更多的鍵/值對其進行擴充,將其轉換回JSON,並將請求代理到另一個系統。你的反應思想讓我以另一種方式思考 - 這可能不需要將它轉換爲案例類 - 我可以將它用作「JsValue」。這感覺就像我一邊踩着實際的問題;我仍然對你如何完成這樣的事情感興趣。 – clocklear
@clocklear你需要json中的值來擴充新的值嗎? –