Kotlin http4k: как получить поле json из тела ответа?
Ниже показан текст ответа http4k JavaHttpClient: '{"Hash":"QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH","Size":0,"CumulativeSize":6,"Blocks"}: "Тип": 0, "Тип блоков":
Какой модуль Kotlin можно использовать для извлечения значений полей "Хеш", "Размер", "Блоки" "Тип"?
2 ответа
Вам нужно добавить один из поддерживаемых модулей JSON :
// Argo:
implementation group: "org.http4k", name: "http4k-format-argo", version: "4.33.1.0"
// Gson:
implementation group: "org.http4k", name: "http4k-format-gson", version: "4.33.1.0"
// Jackson:
implementation group: "org.http4k", name: "http4k-format-jackson", version: "4.33.1.0"
// Klaxon:
implementation group: "org.http4k", name: "http4k-format-klaxon", version: "4.33.1.0"
// Moshi:
implementation group: "org.http4k", name: "http4k-format-moshi", version: "4.33.1.0"
// KotlinX Serialization:
implementation group: "org.http4k", name: "http4k-format-kotlinx-serialization", version: "4.33.1.0"
Затем вы можете извлечь поля аналогичным образом:
import org.http4k.core.Response
import org.http4k.core.Status
import org.http4k.format.Jackson.asJsonObject
val body = """
{"Hash":"QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH","Size":0,"CumulativeSize":6,"Blocks":0,"Type":"file"}
""".trimIndent()
val response = Response(Status.OK).body(body)
response.bodyString().asJsonObject().let {
require(it.get("Hash").textValue() == "QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH")
require(it.get("Size").intValue() == 0)
require(it.get("CumulativeSize").intValue() == 6)
require(it.get("Blocks").intValue() == 0)
require(it.get("Type").textValue() == "file")
println(it.get("Hash").textValue())
}
Некоторая документация доступна здесь: https://www.http4k.org/api/org.http4k.format/-json/
Используйте клаксон
build.gradle.kts:
implementation("com.beust:klaxon:5.0.1")
модуль котлина:
import com.beust.klaxon.Klaxon
data class MyData(val name: String)
val result = Klaxon().parse<MyData>("""
{ "name": "John Doe",}
""")
val name = result?.name
дает "Джон Доу"