一番簡単に作る方法はどれなのか、と思いましたので。
サードパーティーは使わず、
すべて kotlinx.serialization
で。
以下の JsonObject
を作ります。
{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "Server-Sent Events とは"
}
],
"temperature": 0.7,
"stream": false
}
👨🎨 文字列から作る
文字列内に JSON を記述しておいて変換します。
val str = """{
| "model": "gpt-3.5-turbo",
| "messages": [{"role":"user","content":"Server-Sent Events とは"}],
| "temperature": 0.7,
| "stream": false
|}""".trimMargin()
val element = Json.parseToJsonElement(str)
println(element)
println(element.javaClass.simpleName)
// {"model":"gpt-3.5-turbo","messages":[{"role":"user","content":"Server-Sent Events とは"}],"temperature":0.7,"stream":false}
// JsonObject
👨🎨 データクラスから作る
データクラスを先に作っておきます。
@Serializable
data class ChatRequest(
val model: String,
val messages: List<Message>,
val temperature: Double,
val stream: Boolean
)
@Serializable
data class Message(
val role: String,
val content: String
)
値をセットして変換します。
val data = ChatRequest(
model = "gpt-3.5-turbo",
messages = listOf(Message(role = "user", content = "Server-Sent Events とは")),
temperature = 0.7,
stream = false
)
val element = Json.encodeToJsonElement(data)
println(element)
println(element.javaClass.simpleName)
// {"model":"gpt-3.5-turbo","messages":[{"role":"user","content":"Server-Sent Events とは"}],"temperature":0.7,"stream":false}
// JsonObject
👨🎨 Json エレメントビルダー で作る
ビルダー関数 buildJsonArray()
, buildJsonObject()
を使いながら DSL 形式で JSON の構造を定義していきます。
val element = buildJsonObject {
put("model", "gpt-3.5-turbo")
putJsonArray("messages") {
addJsonObject {
put("role", "user")
put("content", "Server-Sent Events とは")
}
}
put("temperature", 0.7)
put("stream", false)
}
println(element)
println(element.javaClass.simpleName)
// {"model":"gpt-3.5-turbo","messages":[{"role":"user","content":"Server-Sent Events とは"}],"temperature":0.7,"stream":false}
// JsonObject
👉 json-element-builders kotlinx.serialization/json.md at master · Kotlin/kotlinx.serialization
👨🎨 まとめ
文字列から作成する方法が直接的で簡単に書けますね!
テストコードで見かけることも多いように思います。
👉 kotlinx.serialization/json.md at master · Kotlin/kotlinx.serialization · GitHub