問題タブ [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.
java - moshi で逆シリアル化するときに long 値と double 値を区別する方法は?
私の目標は、JSON 形式を使用してデータの任意の行を同期することです。行の正確なスキームがわからないため(これは一般的な同期方法です)、データモデルは明らかに「オブジェクト」に依存する必要があります。したがって、Java ではMap<String,Object>
、サーバーと同期する配列があります。
そのような行を JSON に変換すると、次のようになります。
これまでのところ、とても良いです - moshi に問題はありません - すべてが期待通りに動作します。
問題: moshi でその JSON をデシリアライズしようとすると、"long" メンバーの double-value が返されます。Moshi はすべての数値を Double に変換します。残念ながら、すべての数値を double に安全に変換できるわけではありません。非常に大きな整数 (別名 long) には、double の精度が限られているという問題があります。また、丸め効果も存在する可能性があります。
moshi でイシューをオープンしましたが、残念ながらそれはクローズされました。たぶん、私は十分に明確ではありませんでした。(第192号)
JSON には整数の概念がなく、数値と文字列のみです。しかし、上記の例の「double2」の微妙な詳細は、私の問題の解決策につながる可能性
があります。数値に小数点が含まれていない場合、それは整数であり、long に変換する必要があります。
long は無損失で double に変換できないため、値が double に変換される前にパーサーをインターセプトするメソッドが必要です。しかし、それを行う方法は?
Moshi には JsonAdapter という便利な概念がありますが、残念ながら、この場合にどのように使用できるかわかりません
。生成された double を long にキャストできないため、そのような JsonAdapter の入力タイプは Object でなければなりません。したがって、パーサーが値を変換する前に、パーサーをインターセプトする必要があります。
しかし、そこから複数の型を返す方法は? (そこから String、Double、または Long を返す必要があります。または、入力を数値のみに制限できる場合は、少なくとも Long または Double を返す必要があります。)
(私のバックエンドは PHP で書かれており、目的の出力を自動的に生成します。整数は小数点なしで書き込まれます。)
java - カスタム Moshi アダプターからの StackOverflowError
null 文字列値に対処するための moshi アダプターを作成しました。
それを使用して Moshi インスタンスを作成し、レトロフィットに追加しました。
}
実行時に、MoshiAdapterMethodsFactory の繰り返しメソッドから StackOverflowError を取得します。
.... 等々。
問題のある 2 つのコード領域は 212 行目です。
そして81行目:
メソッドファクトリがこれらのメソッドを際限なく生成するのはなぜですか?
android - Moshi の複数のアダプター
Moshi で 1 つの Moshi に 2 つのアダプターを使用することが合法であるかどうかを確認したかったのですが、エラーは発生していませんが、一部のデバイスでは問題があることがわかりました。
java - オブジェクトまたはオブジェクトの配列である JSON キーを解析する
Moshi で、オブジェクトまたは同じ型のオブジェクトのリストの両方を解析する型アダプターを作成することは可能ですか?
たとえば、JSON は次のような場合があります。
それ以外の場合は次のとおりです。
理想的には、次のような Java オブジェクトが必要です。
android - Moshi で複数のタイプの json リストを解析する方法
次のように、プレーンな String および Image オブジェクトと混合された json リストを取得します。
Moshi で解析するには?
List<Data>
、 where 、StringData extends Data
およびImageData extends Data
android - JSON をネストするためのカスタム Retrofit コンバーター
文字列変数に単一の認証トークンを含む POJO があります。次のテンプレートを使用して、これを API に送信する必要があります。
moshi を使用して POJO を JSON に変換しています。
後付けコンバーターを使用して、現在のブラケットの外側に追加のブラケットを追加するにはどうすればよいですか?
android - Android Kotlin Moshi カスタム Json アダプター
わかりましたので、次の Json Pojo があります。
カスタムデシリアライザーを書きたいので、最終的なオブジェクトは次のようになります。
基本的に、マッピングは次のとおりです。
JCategory -> Category
JProduct -> Prod1 / Prod2
JProduct 内の値に基づく
JCategory の 2 つのリストは 1 つに結合され、このリストにはさらに多くの JCategory と Prod1/Prod2 が含まれます。
これは、Moshi によると、このアダプターでデータをマッピングする有効かつ効率的な方法ですか?
JCategory があり、同じオブジェクトのリスト内にあることに注意してください。したがって、アダプターはこれを自動的に解析すると思っていましたが、そうではありません。だから私は試しlist.add(fromJson(it))
てみましたが、うまくいきました。
だから私の質問は:
list.add(fromJson(it))
このようなケースを処理する適切な方法はありますか?- オブジェクト内のプロパティに基づいて、オブジェクトを別のオブジェクト/他のオブジェクトにマップするにはどうすればよいですか? fromJson は、変換されたオブジェクトの 1 つのタイプのみを返すことができます。
java - Moshi を使用して未知のキー json を解析する方法
これは私が持っているJSONの例です
ラベル「カテゴリ、サブカテゴリ...」は動的に変化する可能性があることに注意してください
Moshi を使用してこの JSON を解析するにはどうすればよいですか?