问题标签 [moshi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5623 浏览

android - Retrofit 和 Moshi:用两个数组解析 JSON 对象

在学习如何将 Retrofit 与 Moshi 一起使用以在 Android 中使用 API 的过程中,我遇到了一个我无法理解的问题。此处的目标是获取从 API 返回的简单类别数组。在本例中,当我调用 Behance API 以列出所有创意字段时,未返回数组。相反,它是一个具有两个数组的对象:

如何使用 Moshi 和 Retrofit 解析此 JSON 响应以获取两个创意字段数组?以下是我预期会起作用的设置。现在我知道 JSON 不是一个列表,而是一个具有 2 个“字段”和“流行”值的 FieldList,但我看不到如何使用 Moshi 提取数组。

创意领域模型

接口/服务

API 类

0 投票
2 回答
1285 浏览

android - Kotshi 问题 - KotshiApplicationJsonAdapterFactory 的未解决参考

所以我正在尝试遵循 Kotshi 的简单 read.me为我的项目设置它,但我似乎遇到了一些障碍。我目前在 read.me 的这一部分

但 KotshiApplicationJsonAdapterFactory 似乎给了我一个未解决的参考错误。现在这听起来像一个绝对愚蠢的问题,但 KotshiApplicationJsonAdapterFactory 应该是我设置的自定义类吗?如果是这样,我在文档中看不到任何关于它的地方。我的 gradle 添加了两个依赖项,所以我非常困惑。

0 投票
1 回答
1335 浏览

android - Retrofit 和 Moshi:解析变量名对象

我正在使用 Retrofit 2 和 Moshi 从端点读取和解析 JSON。我的改造实例是这样定义的:

我正在使用 Kotlin 数据类将信息存储在模型中:

数据类:

现在,因为 JSON 是这样格式化的,所以解析 JSON 并且填充模型就好了:

这是因为对象与模型 1:1 映射。所以在上面的例子中,“Response”键映射到Data类中的“Response”变量名。

我的问题是:如果键都是可变的怎么办?您如何在 Kotlin 数据类中表示这一点?

要解析的示例 JSON 文件:

0 投票
2 回答
6447 浏览

android - 具有泛型类型的 Android 和 Moshi 适配器

我正在尝试在我的 Android 项目中使用 moshi,但遇到了一些问题。

这是一个精简的示例 JSON

如您所见,它是 的列表ScheduleGroups,在该对象中您有一个标签 和schedule_itemsScheduleItem这是一个包含3 个字段的数组:

  • type: 字符串标签,用于标识这是哪种类型的项目
  • item: 可以属于Event, Game, 和CheckIn
  • schedule_item_groups: 一个ScheduleGroup是更多的列表 - ScheduleItems

所以第一个问题是ScheduleGroup有一个列表,ScheduleItems每个项目都可以有自己的ScheduleGroup包含更多项目的列表。

第二个问题是item字段,它需要被实例化为三个类之一:EventGameCheckIn

我已经为此工作了一段时间,到目前为止,我一次只能让一个工作,但不能同时工作。

以下是数据类(我只包括了其中一个Item类):

这就是我让动态 Generic 类Item工作的方式:

它将正确地创建正确的Item类,但是当我尝试添加时,List<ScheduleGroup>我得到了错误,无论我做什么,我似乎都无法让两者都工作。

编辑:

我已经更新了代码以显示我用来尝试和反序列化schedule_item_groupswhich is a List<ScheduleGroup>.

我收到一个错误:(这与我之前遇到的错误不同......)

com.squareup.moshi.JsonDataException:java.lang.IllegalArgumentException:无法将最终 java.lang.String 字段 com.roomroster.mobile_android.data.api.schedule.models.ScheduleGroup.label 设置为 com.squareup.moshi.LinkedHashTreeMap $.data[0].schedule_items[1]

0 投票
2 回答
1984 浏览

moshi - 处理一个有时是布尔值有时是整数的字段

我正在尝试使用 reddit JSON API。有些帖子数据对象包含一个名为edited 的字段,如果帖子尚未编辑,则该字段可能包含布尔值 false,如果帖子已编辑,则可能包含时间戳 int。

有时是布尔值:

有时是一个整数:

尝试解析 POJO 将字段设置为 int 的 JSON 时,出现错误:JsonDataException: Expected an int but was BOOLEAN ...

我该如何使用 Moshi 处理这个问题?

0 投票
1 回答
304 浏览

java - moshi 序列化支持,如 @jsonunwrapped

我有一个这样的 POJO:

当我用内容提出休息请求时

Spring RestController 将其反序列化为注册 POJO,因为它使用 Jackson 进行反序列化。之后,当我再次使用 Moshi 适配器序列化对象时,我得到一个像这样的 json:

Moshi 是否可以像这样序列化对象:

或者是否有任何其他 JsonAdapter(杰克逊除外)可用于以这种方式序列化对象?

提前致谢

0 投票
1 回答
647 浏览

java - 杰克逊 json 中的 TypeToken.getParameterized

在 GSON 中,我接下来可以:

在莫西:

我怎么能用杰克逊 json 做到这一点?

0 投票
1 回答
806 浏览

android - Moshi 在 Kotlin 惰性属性上失败

当使用 Moshi 反序列化一个类时,它在by lazy属性上失败并出现错误:

所以我想告诉 Moshi 忽略这个属性。忽略这一点的方法显然是使用@Transient但只能用于字段 - 而不是属性。

那么在使用 Moshi 反序列化时如何忽略 Kotlin 惰性属性呢?

0 投票
1 回答
555 浏览

android - 如何在 Kotlin 中使用 GSON 实现多态列表反序列化?

我有一个数据馈送,它返回一个列表,该列表可能是三种类型之一(说类型 A、B 和 C)。以上所有类型共享 2 个属性,其余属性特定于该类型。我尝试使用该模式。

我正在使用 Retrofit 并尝试将列表反序列化为

在 Kotlin 中应该是

但是,GSON 在实例化抽象的父类时会引发反序列化错误。

有什么想法可以在 Kotlin 中实现吗?

0 投票
1 回答
3002 浏览

kotlin - 为什么 Moshi 在使用 fromJson 解析 json 时返回一个可为空的对象?

可能只是我用错了,因为我是 Kotlin 和 Moshi 的新手。

data class InitialAppResult(val status: Int, val message: String, val baseprm: String)

fromJson 怎么可能是空的并且需要一个 !! 或者 ?。例如:fromJson!!.baseprm

如果解析失败并且缺少必填字段,则在我的情况下它只会引发异常。那么它如何解析“无效”的 JSON 响应而不失败,即返回 null 呢?