gpt4 book ai didi

json - 如何在 Scala 中创建 JSON 对象?

转载 作者:行者123 更新时间:2023-12-04 02:04:48 25 4
gpt4 key购买 nike

首先,我在 Google 和 StackOverflow 上搜索了很多类似的问题,但我没有找到任何有用的答案(令我大吃一惊)。

我看到了一些关于 Play Framework , how to create JSON array in Javahow to create JSON objects in Java ,但我不想使用 Play Framework,也不知道 JSON 对象的创建是否从 Scala 到 Java 不同。

以下是我要创建的 JSON。稍后我会将对象转换为字符串以通过 POST 请求(通过 API 调用)发送它。

{
"start_relative": {
"value": "5",
"unit": "years"
},
"metrics": [
{
"name": "DP_391366" # S-Temperature - Celsius
},
{
"name": "DP_812682" # Sensor-A4 Luminosity
}
]
}

我怎样才能在 Scala 中做这样的事情?

最佳答案

您应该使用处理序列化/反序列化的库。
我会考虑在 Spray Json 之间进行选择和 Play Json .

我将向您解释该过程如何与 一起使用播放首先,它与Spray中的非常相似。

假设您有一个类和一个带有实例和 json 作为字符串的对象:

case class MyClass(id: Int,
name: String,
description: String)

object Data {
val obj: MyClass = MyClass(1, "me", "awesome")
val str: String =
"""
|{
| "id": 1,
| "name": "me",
| "description": "awesome"
|}
""".stripMargin
}

对于 MyClass要进行序列化/反序列化,您将需要一个隐式格式化程序,专门用于此,因此您将使用 创建一个包含此格式化程序的对象播放 .
trait MyClassPlayProtocol {
implicit val formatAbility = Json.format[Ability]
}
object MyClassPlayProtocol extends MyClassPlayProtocol

序列化/反序列化将如下所示:
object PlayData {

import play.api.libs.json.JsValue
import play.api.libs.json.Json
import MyClassPlayProtocol._
import General._

val str2Json: JsValue = Json.parse(str)
val obj2Json: JsValue = Json.toJson(obj)

val json2Str: String = Json.stringify(str2Json)
val json2Obj: MyClass = obj2Json.as[MyClass]
}

喷雾 ,协议(protocol)将如下所示:
trait MyClassSprayProtocol extends DefaultJsonProtocol {
implicit val myClassFormat = jsonFormat3(MyClass)
}
object MyClassSprayProtocol extends MyClassSprayProtocol

和序列化/反序列化:
object SprayData {

import spray.json._
import MyClassSprayProtocol._
import General._

val str2Json: JsValue = str.parseJson
val obj2Json: JsValue = obj.toJson

val json2Str: String = str2Json.compactPrint
val json2Obj: MyClass = obj2Json.convertTo[MyClass]
}

如您所见,这主要是两者之间的选择问题。两者都还在改进,可能会在不久的将来。

根据基准,您会发现一个比另一个好几毫秒(通常是 Spray)。

我一个人正在使用 喷雾在工作和 播放在一些个人项目中,我不能说我发现了一些根本不同的东西。

编辑:

最后回答你的问题,从 MyClassString (序列化),你会做这样的事情:
PLAY:  Json.stringify(Json.toJson(myClass))
SPRAY: myClass.toJson.compactPrint

和反序列化:
PLAY:  Json.parse(string).as[MyClass]
SPRAY: myClass.parseJson.convertTo[MyClass]

关于json - 如何在 Scala 中创建 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33307386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com