Tag: gson

Json给kotlin数据类

有没有现成的服务从json模型生成kotlin数据类的方式http://www.jsonschema2pojo.org/ site? 我的新项目已经超过了复杂的API响应,所以它会节省我的时间。

Kotlin / Android应用程序使用Retrofit2。 JSON查询不能按我期望的那样工作

在一个小的android应用程序工作,以帮助我了解JSON查询。 小测试应用程序的工作,直到我试图深入钻到我的测试JSON数据。 我将发布一个链接到我正在使用的JSON数据,以节省空间。 这是来自weatherwunderground的API并托管在myjson.com上的示例代码。 JSON: https : //api.myjson.com/bins/19uurt 主要活动代码 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val retriever = CycloneRetriever() val callback = object : Callback { override fun onResponse(call: Call?, response: Response?) { println(“Got a response!”) println(response?.body()?.currenthurricane?.get(1)?.stormInfo?.get(0)?.stormName).toString() } override fun onFailure(call: Call?, t: Throwable?) { println(“The thing, it failed!”) […]

当我在Kotlin中使用Gson时,如何为json设计一个类?

我是Json和Gson的初学者,我知道我可以将json映射到一个类中,并通过Gson将一个类映射到json。 “我的Json”是一个JSON数据,我试图设计一个类“我的类”来映射,但我认为“我的类”不好。 你能给我看一些示例代码吗? 谢谢! 我的课 data class Setting ( val _id: Long, val Bluetooth_Stauts: Boolean, val WiFi_Name,String val WiFi_Statuse: Boolean ) 我的Json { “Setting”: [ { “id”: “34345”, “Bluetooth”: { “Status”: “ON” }, “WiFi”: { “Name”: “MyConnect”, “Status”: “OFF” } } , { “id”: “16454”, “Bluetooth”: { “Status”: “OFF” } } ] } 更新 以下是Rivu […]

使用Kotlin无法反序列化Gson的JSON(仅适用于Android KitKat,可能更低)

正如标题描述我试图反序列化一些JSON这样做: val jsonResponse = ApiClientLive().get(“events/” + id.toString() + “.json”) val event = GsonBuilder().create().fromJson(jsonResponse, Event::class.java) // course1.name!!.compareTo(course2.name!!, ignoreCase = true) } 这只会在Android KitKat,Api级别19运行时崩溃,这是崩溃消息:(19是我支持的最低,所以我不知道更低的api水平) onError() java.lang.RuntimeException: Unable to invoke no-args constructor for class …event.models.Event. Registering an InstanceCreator with Gson for this type may fix this problem. at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:226) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:210) at com.google.gson.Gson.fromJson(Gson.java:888) at com.google.gson.Gson.fromJson(Gson.java:853) at com.google.gson.Gson.fromJson(Gson.java:802) at […]

如何在Kotlin中使用Gson的TypeToken +generics

我无法从自定义类(Turns)中获取genericstypes的列表: val turnsType = TypeToken<List>() {}.type val turns = Gson().fromJson(pref.turns, turnsType) 它说: cannot access ” it is ‘public /*package*/’ in ‘TypeToken’

Gson Map to Object

将Map格式的JSON转换为相应的java / kotlin对象的最有效方法是什么? 现在我必须像这样使用它,这似乎是一个愚蠢的实现。 gson.fromJson(gson.toJson(mapToConvert), typeToken) 有什么建议么?

对Json TypeToken的EmptyClassBlock皮棉投诉

我有一块如下所示的kotlin代码, gson.fromJson<Map>(data, object : TypeToken<Map>() {}.type) Detekt不喜欢它,并投诉EmptyClassBlock – [] 有什么办法可以解决吗?

Gson toJson和ArrayList在Kotlin

类似于这个问题,我想将一个对象(实际上,它是一个来自翻新的API响应)转换成json字符串,所以将它存储在某个地方会更简单。 响应结构是这样的: { “metadata”: { “count”: 0, “type”: “string” }, “results”: [ { “obj1”: { “param1”: “s1”, “param2”: “s2” }, “obj2”: { “param3”: 0, “param4”: 0, “param5”: 0 }, “obj3”: 0, “obj4”: “27/12/2017” } ] } 使用List ,我将结果数组存储在一个List ,这是我传递给Gson().toJson ,如下所示: var contentResponse: String = “” try{ this.contentResponse.plus(Gson().toJson(response)) } catch (e: Exception){ Log.e(“Gson error”, e.toString()) } […]

Kotlin:指定的types参数会导致Gson失败

我遇到了一个奇怪的行为,使用reifiedtypes的函数内的Gson反序列reified 。 只有当interfaces涉及到types参数时才会发生。 采取以下代码: val toBeSerialized = listOf(“1337”) with(Gson()) { val ser = toJson(toBeSerialized) val deser = fromJson<List>(ser) } 第4行使用自定义扩展函数Gson.fromJson(json: String): T 。 如果T被定义为物化,它就会失败 : inline fun Gson.fromJson(json: String): T = fromJson(json, object : TypeToken() {}.type) 如果它被定义为一个正常的types参数,它就可以工作 : fun Gson.fromJson(json: String): T = fromJson(json, object : TypeToken() {}.type) (请注意,使T化在这里没有意义,只是想了解它在特殊用例中的影响) 使用reified外观时的例外情况如下: Exception in thread “main” java.lang.RuntimeException: […]

使用Gson和Kotlin进行无漏网络响应

假设你有这样的数据类pojo,它表示典型的基于gson的响应表示来自服务器。 data class User( @field:SerializedName(“id”) val id: String, @field:SerializedName(“name”) val name: String, @field:SerializedName(“user_phone”) val phone: String?) ID和名称字段是必需的, 电话字段是可选的 所以这个模型所期望的适当的json,例如: { “id”: “someHash”, “name”: “John Snow” } 有时服务器可以发送json,如: { “id”: “someHash” } 不幸的是,这样的json解析成功没有任何错误,因为gson使用不安全的reflection ,并为Java编写。 所以作为结果将有损坏kotlin模型与空值存储在非空字段 我想在json反序列化层上为这个模型提供validation,因为最好是在那里接收一个错误,而不是在应用程序的任何其他部分,这个部分需要非空字段。 我正在寻找这个问题的任何consize解决方案。 当然,你可以为每个模型提供一些明确的validationfunction fun User.validate() { if (id == null) throw JsonParseException(“‘id’ is null!”) if (name == null) throw JsonParseException(“‘name’ is […]