问题标签 [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.
json - 无法使用 Moshi 从返回的 JSON 解析数组
我已经开始将 Moshi 与 Retrofit 2 一起使用,并且在解析从服务调用返回的父对象中的对象数组时遇到了问题。返回的 JSON 如下所示:
我在“照片”字段中遇到以下异常:
com.squareup.moshi.JsonDataException:应为 BEGIN_ARRAY,但在路径 $[0].acf.photos 处为 STRING
我已经定义了这样的模型:
我尝试以各种其他方式在模型中声明该属性,并通读文档以找出我做错了什么。我被困在这一点上,真的可以用第二双眼睛将我指向正确的方向。我有一种感觉,我错过了一些非常简单和明显的东西。提前感谢任何可以提供帮助的人。如果我遗漏了任何相关信息,请告诉我,我会更新帖子。
更新:我发现此异常仅在我获取多个 ACF 时发生。如果我请求单个对象,一切都会正确解析。
java - Sugar ORM和Moshi冲突
我在尝试使用moshi进行序列化/反序列化以及将 Sugar ORM 用于我的 Android 项目的数据库时遇到了多重继承问题。每个库都希望我的模型 (POJO) 扩展它们的类以便它们工作。我已经扩展了 moshi 的类,但我不知道如何处理 Sugar ORM,因为 Java 中不允许多重继承。getId()
我应该为这两个库扩展的类中似乎也存在方法冲突。解决这个问题的最佳方法是什么?我特别选择了 moshi 而不是 Gson(我以前经常使用它),因为它支持我正在使用的 API 使用的JSON API 规范
java - Moshi 无法为具有泛型的类创建转换器
我的一些服务器对成功的响应是:
{“错误”:空,“数据”:空}
我的模型是:
如果我的端点是
这行得通,但是 String 类型是无用的,因为数据将始终为空。但如果我做到了:
我崩溃了
完整日志:
java - 使用 Moshi 反序列化可以是两种数据类型之一的字段
我从 OrientDB 服务器收到一些 JSON,看起来像这样:
现在这两个字段可以是以下两种类型之一:out
和我自己的自定义对象(我们称之为 a )。例如,对于一个请求,我可能会收到以下信息:in
String
Record
对于另一个我可能会得到:
等等。两者都可能是String
s,两者都可能是Records
,一个可能是 a String
,另一个是 a Record
,等等。现在,当我使用Moshi反序列化这种 JSON 时,我将有两个参数out
并in
保存它们各自键的值;但是,因为这些值不是固定的数据类型,所以说起来容易做起来难。
创建多个 POJO(或“POKO”,我猜,因为我使用的是 Kotlin)是行不通的,因为这些对象可以在其他JSON 对象和类似的东西中找到。我需要一个对象,这些参数可以采用可变数据类型。那我该怎么做呢?
我是否必须在 Moshi 中编写一个自定义适配器来序列化/反序列化这些值?如果是这样,我将如何编写一个可以根据参数值分配某种数据类型的程序?或者是否有某种我可以找到/编写的 Kotlin 类/函数/扩展函数可以容纳两种可能的数据类型?
如果它是相关的,我也使用 Retrofit 2 + RxJava 2 来使我的 HTTP 异步调用,所以如果这些库中有任何数据类型或函数可以促进这样的事情,我会全力以赴。
即使任何人都只能用 Java 回答也没关系,因为我可以自己转换代码。如果我遗漏了一些明显的东西,我会提前道歉。
java - Moshi 通用类型适配器
假设有以下代表服务器响应的参数化数据类:
我在运行时知道 T 类型是什么。moshi 是否像 Gson 一样支持泛型类型适配器?使用 Gson id 执行以下操作来解析它。
json - Moshi + Kotlin + SealedClass
Is there a way of deserializing json using
LayerType is just some enum which can be used to distinguish which type should this object have.
I thought I could add Adapter this way:
Where LayerJson would be object which has every possible field of all LayerTypes.
Now the problem is:
Cannot serialize abstract class com.example.models.layers.Layer
I could try to use interface, but I don't think it would be correct to use empty interface in this.
kotlin - 使用具有多个输入字段的 Moshi
我有一些看起来像这样的 JSON:
并使用 Moshi 将其解组为如下数据结构:
一切正常。但是,我真的很想将currency
andvalue
参数提取到一个单独的Money
对象中。所以我的模型看起来更像:
我正在努力解决的挑战是如何注释事物,以便可以为Money
对象提供两个不同的字段 (currency
和value
),它们来自与父帐户相同的级别。
我是否需要创建一个名为的中间“解组”对象,MoshiAccount
然后使用自定义适配器将其转换为我的真实Account
对象?
我看到了如何使用 Moshi 将 int 数组反序列化为自定义类?看起来很接近(除了在这种情况下,适应的对象(VideoSize)只需要一个字段作为输入......在我的情况下,我需要currency
和value
)
任何想法或建议将不胜感激。谢谢
json - Moshi/Kotlin - 如何将 NULL JSON 字符串序列化为空字符串?
我正在尝试编写一个 null 安全的 String 适配器,它将将此 JSON 序列{"nullString": null}
化为:Model(nullString = "")
以便任何具有“null”值的 JSON 都将被替换为""
(假设存在这样的数据类) :) data class Model(val nullString: String)
_
我写了一个自定义适配器来尝试处理这个:
...试图解决这个解析错误:
com.squareup.moshi.JsonDataException: Expected a name but was NULL at path $.nullString
Moshi 解析代码:
我在这里想念什么?对 moshi 来说还是新手,因此感谢您的帮助!
android - 在带有 Kotlin 的 Moshi 1.5 中使用 KotlinJsonAdapterFactory() 时出现 Class Not Found 异常
我面临的问题有点奇怪,因为当我有一个普通模型类用作改造 2 的响应体模型时,我遇到了一些意外错误,假设
和数据类是
我的代码崩溃显示 ClassNotFoundException (我在调试模式下运行),如果删除 KotlinJsonAdapterFactory() 崩溃不会发生,但数据值不存在,即在调试模式下它看起来好像它不存在,即Example 的一个对象将只显示令牌值,数据不存在甚至不为 null,但我需要 KotlinJsonAdapterFactory() 因为我使用 annonations 所以上面只是一个实验。
我找到的唯一解决方案是将两个类都转换为数据类并且它工作得很好(当然我必须删除 RealmObject 扩展并使 RealmList 成为一个普通列表),但我需要扩展 RealmObject() 类并且数据类无法打开Realm db 需要模型。
所以我恢复到 1.4 删除了 KotlinJsonAdapterFactory(),一切正常,即使在 proguard 之后,我应该怎么做才能升级到 Moshi 1.5。
此外,我在示例代码中更新了一些数据对象是 RealmList 并且可能为什么在响应到来时它被忽略/不存在可能是因为我的 Moshi 的 RealmListAdapter 被忽略了???
我将附上我的 moshi 和改造实例的片段
Moshi`实例
改造实例
json - Gson 或 Moshi:POJO 中的字段可以有 2 种类型,如何保存到任何字段
编辑:
这是我拥有的json字符串:
或者它可以来自服务器的任何 json 字符串。这里的要点是可能有 1 个或多个字段可能具有动态值(在这种情况下 field3 可以是字符串或 int)
然后我想将它们反序列化为任何 POJO
这意味着如果从服务器发送的值是Int
,我想将值设置为field3Int
。如果是String
,则设置为field3String
。
可能有其他 POJO 将具有这些可能具有动态值的字段。
感谢 Serj 的回答,但在我编辑问题以显示我的真实情况后,我仍然无法使其在 TypeAdapter 类上工作。
顺便提一句。我将它与 Retrofit2 一起使用,如下所示: