我正在尝试将值保存到jsonb DB列:
val deliveryAddressAsJson = deliveryAddress?.toJson()
val lat = deliveryAddressAsJson?.get("latitude")
val lng = deliveryAddressAsJson?.get("longitude")
val dataJson = jsonObject("comment" to "KARTKOORD:#LE#$lat#$lng# #")
val values = mapOf(
"type" to EventType.RESOLVED.dbName,
"created_by" to ctx.userId,
"data" to dataJson.toPgObject(),
"package_id" to packageId
)
@Language("PostgreSQL")
val sql = """insert into package_event(type, created_by, data, package_id) values (:type, :created_by, :data, :package_id)""".trimMargin()
insert(ctx, sql, values).bind()
我可以看到数据是这样保存的:
data -> {Collections$SingletonMap@6348} size = 1
key = "data"
value = {Collections$SingletonMap@6348} size = 1
key = "comment"
value = "KARTKOORD:#LE#59.8098962#10.7809297# #"
但是,如果我试着解析它:
val resolvedPackageEvent = fetchRows(ctx, queryOf("select * from package_event where package_id = ? and type = 'resolved'", packageId)).first()
val data = parseJson(resolvedPackageEvent.string("data"))
val deliveryAddress = data.get("comment")
我得到一个抛出的异常:
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 20 path $.comment
如果我尝试使用jsonObject
方法获取值,如下所示:
fun Entity.jsonObject(key: String): JsonObject = when (val v = this[key]) {
is String -> parseJson(v)
else -> v as JsonObject
}
resolvedPackageEvent.jsonObject("data")
我得到一个异常:
java.lang.ClassCastException: class java.util.Collections$SingletonMap cannot be cast to class com.google.gson.JsonObject (java.util.Collections$SingletonMap is in module java.base of loader 'bootstrap'; com.google.gson.JsonObject is in unnamed module of loader 'app')
我应该如何解析这个json字符串?
1条答案
按热度按时间4urapxun1#
您的数据不是字符串。
我手头没有gson语法,因此无法提供用于检索值的精确代码。