問題タブ [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 に答える
1089 参照

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 で書かれており、目的の出力を自動的に生成します。整数は小数点なしで書き込まれます。)

0 投票する
1 に答える
1128 参照

java - カスタム Moshi アダプターからの StackOverflowError

null 文字列値に対処するための moshi アダプターを作成しました。

それを使用して Moshi インスタンスを作成し、レトロフィットに追加しました。

}

実行時に、MoshiAdapterMethodsFactory の繰り返しメソッドから StackOverflowError を取得します。

.... 等々。

問題のある 2 つのコード領域は 212 行目です。

そして81行目:

メソッドファクトリがこれらのメソッドを際限なく生成するのはなぜですか?

0 投票する
1 に答える
829 参照

android - Moshi の複数のアダプター

Moshi で 1 つの Moshi に 2 つのアダプターを使用することが合法であるかどうかを確認したかったのですが、エラーは発生していませんが、一部のデバイスでは問題があることがわかりました。

0 投票する
1 に答える
824 参照

java - オブジェクトまたはオブジェクトの配列である JSON キーを解析する

Moshi で、オブジェクトまたは同じ型のオブジェクトのリストの両方を解析する型アダプターを作成することは可能ですか?

たとえば、JSON は次のような場合があります。

それ以外の場合は次のとおりです。

理想的には、次のような Java オブジェクトが必要です。

0 投票する
1 に答える
2353 参照

android - Moshi で複数のタイプの json リストを解析する方法

次のように、プレーンな String および Image オブジェクトと混合された json リストを取得します。

Moshi で解析するには?

List<Data>、 where 、StringData extends Data およびImageData extends Data

0 投票する
2 に答える
546 参照

android - JSON をネストするためのカスタム Retrofit コンバーター

文字列変数に単一の認証トークンを含む POJO があります。次のテンプレートを使用して、これを API に送信する必要があります。

moshi を使用して POJO を JSON に変換しています。

後付けコンバーターを使用して、現在のブラケットの外側に追加のブラケットを追加するにはどうすればよいですか?

0 投票する
1 に答える
1412 参照

android - Android Kotlin Moshi カスタム Json アダプター

わかりましたので、次の Json Pojo があります。

カスタムデシリアライザーを書きたいので、最終的なオブジェクトは次のようになります。

基本的に、マッピングは次のとおりです。

  • JCategory -> Category

  • JProduct -> Prod1 / Prod2JProduct 内の値に基づく

JCategory の 2 つのリストは 1 つに結合され、このリストにはさらに多くの JCategory と Prod1/Prod2 が含まれます。

これは、Moshi によると、このアダプターでデータをマッピングする有効かつ効率的な方法ですか?

JCategory があり、同じオブジェクトのリスト内にあることに注意してください。したがって、アダプターはこれを自動的に解析すると思っていましたが、そうではありません。だから私は試しlist.add(fromJson(it))てみましたが、うまくいきました。

だから私の質問は:

  • list.add(fromJson(it))このようなケースを処理する適切な方法はありますか?
  • オブジェクト内のプロパティに基づいて、オブジェクトを別のオブジェクト/他のオブジェクトにマップするにはどうすればよいですか? fromJson は、変換されたオブジェクトの 1 つのタイプのみを返すことができます。
0 投票する
2 に答える
4431 参照

java - Moshi を使用して未知のキー json を解析する方法

これは私が持っているJSONの例です

ラベル「カテゴリ、サブカテゴリ...」は動的に変化する可能性があることに注意してください

Moshi を使用してこの JSON を解析するにはどうすればよいですか?