問題タブ [flexjson]
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 - Java / Android で Flexjson を使用して JSONObject をリストにマッピングする
現在、Flexjson を使用して JSON 文字列を逆シリアル化し、Android アプリのオブジェクト モデルにマップしようとしています。アプリケーションは、複数のカタログとドキュメントを含むいくつかのカタログを持つことができる、いくつかのベンダーを持つ一種のライブラリです。json は、私が影響を及ぼさない Web サービスから取得され、次のようになります。
したがって、各ベンダー、カタログ、ドキュメントは JSONObject で表され、すべての子カタログとドキュメントは JSONArray 内にあります。これまでのところ、Flexjson と次の逆シリアル化コードですべて正常に動作します。
を持つ Library オブジェクトがありList<Vendor>
ます。各ベンダーにはList<Catalog>
と がありList<Document>
ます。
しかし残念なことに、カタログに含まれるドキュメントが 1 つだけの場合、またはカタログに含まれるカタログが 1 つだけの場合、Web サービスは JSONArray を単純な JSONObject に結び付けます。したがって、その場合のjsonは次のようになります。
現在、Flexjson は逆シリアル化の方法を認識していないため、library.vendorX.getDocument() が .vendorX.getDocument()List<HashMap>
ではなくList<Document>
. 1 つのアイデアは、Flexjson にそのようなケースを処理する方法を明示的に伝えることですが、どこから始めればよいかわかりません。もう 1 つの方法は、最初の json を手動で解析し、そのような JSONObjects を適切な JSONArray に置き換えることです。しかし、ライブラリはかなり深い可能性があるため、その方法はあまり良くないと思います。
こちらでご指導いただければと思います。
java - Hibernate と FlexJSON での遅延初期化エラー
FlexJSON を使用して JPA/Hibernate エンティティをシリアル化しようとすると、非常に奇妙なエラーが発生します。オブジェクト自体は派手なものではありません。フィールドと他のオブジェクト間の関係だけです。
他の(まばらな)投稿を読んでコードを見ると、これは遅延初期化の問題のようです。これは非常に少数のケースで繰り返し発生しますが、これらのケースは再現可能です。私の推測では、ステートフルなように見えるので、データに関係していますが、特に非常にまれであるため、データがこの種の例外を引き起こす理由が本当にわかりません。
json - FlexJSON が Date のデシリアライズに失敗する
FlexJSON を使用していDate
ますが、int
. 私は JSONDeserializer を次のように使用しようとしています:
の値json
は次のとおりです。
生年月日 (dob
キー) の値が 1969 年 12 月 7 日から 1970 年 1 月 25 日 (または -2138400000 から 2095200000 ミリ秒) の間にない限り、すべてが正しく解析され、FlexJSON は次のエラーをスローします。
new Date(21600000)
と評価されるため、これがどのように起こっているのかわかりませんThu Jan 01 00:00:00 CST 1970
。
誰かがこれに遭遇しましたか?
更新 #1
したがって、JSONDeserializer は、1969 年 12 月 7 日から 1970 年 1 月 25 日までの範囲にある Unix タイムスタンプとして保存された日付を処理できないため、このエラーが発生しているようです。その範囲外の他の日付も受け入れられ、 Unix タイムスタンプ。
.use()
失敗した日付範囲にない他の Unix タイムスタンプが機能するため、カスタム Transformer を使用してカスタム ObjectFactory を実装したり、カスタム Transformer を作成したりする必要はないと思います。
アップデート #2
transformer
次を使用して、シリアル化時に日付を Unix タイムスタンプから日付形式の文字列に変更しようとしました。
それは想定どおりに機能しましたが、逆シリアル化では機能しませんでした。私はまだ同じエラーが発生しています:
java - FlexJSON を使用して、JSON 文字列の一部をオブジェクトに逆シリアル化するにはどうすればよいですか?
JSON 文字列の一部をオブジェクトにシリアル化しようとしています。JSON 文字列は次のようになります。
次のクラスのオブジェクトに対応する JSON 文字列のユーザー部分のみが必要です。
現在、デシリアライズしようとしている方法は次のとおりです。
メソッドにはパスとクラスのuse
両方が用意されていますが、どのパスを試しても、デシリアライズ後に UserForm の内容が null になります。私は試しました:「ユーザー」、「success.user」、「values.success.user」。
私が間違っていることと、それを修正する方法を知っている人はいますか? Jackson のような他のソリューションもあると思いますが、これはすでに FlexJSON を多く使用している大規模なコードベースの一部です。背景: プロジェクトの一部である API の単体テストを作成しようとしています。
java - 整数値として受け取った flexjson で列挙型をデシリアライズします
C# で記述されたサービスと通信する必要がある JSON REST クライアント アプリケーションを作成しています。日付の違いなどのほとんどは、FlexJson ライブラリを使用すると簡単に解決できます。
ただし、そうでないことが 1 つあります。サービスから受信した値である整数として送信される Enum 値であり、Java Enum 値にマップする必要があります。
Java 列挙型は問題ありません。もちろん、値が存在する限り、整数を列挙型に変換できます。しかし、Flexjson を取得して値を変換することはできません。
列挙型の 1 つはFormStateと呼ばれます
カスタム Transformer を作成しました。それをOurEnumTransformerと呼びましょう。これは、AbstractTransformer を拡張し、ObjectFactory を実装します。逆シリアル化時に.use(Enum.class, OurEnumTransformer)を追加します。そうしないと、次のようなエラーが発生します。
4 を FormState の列挙定数に変換する方法がわかりません
これは整数であり、列挙値の名前ではないため意味があります
しかし、逆シリアル化でエラーが発生し続ける.use(...)を追加します。
FormState には、引数のないコンストラクターがありません。Flexjson は、保護された、プライベート、またはパブリックの引数のないコンストラクターをインスタンス化します。
しかし、実際には、パラメーターのないプライベート コンストラクターがあります。
もう 1 つのことは、OurEnumTransformer に設定されたブレークポイントがヒットしないことです。
.use(Enum.class, OurEnumTransformer)が整数値を持つ列挙型で機能しない理由を教えてください。
以下の列挙型と OurEnumTransformeris のコード
そして工場
最後に呼び出しコード:
最後のコード ブロックでは、jsonData は有効な JSON 文字列であり、enumTransformer は OurEnumTransformer インスタンスです。
最後に、このコードで使用されている dateTransformer は機能します。
どんな助けでも大歓迎です。
java - FlexJSON を使用した多対 1 の関係の逆シリアル化
Web アプリケーション (Spring を使用) に RESTful サポートを追加しているので、次のような CRUD 操作を実行できます: 参加者に関する情報を読む (JSONSerialize):
または、新しい参加者を作成します (JSONDeserialize)
しかし問題は、参加者を作成するために mainFunction オブジェクトのすべてのフィールドを知る必要はありません。唯一のコードを知る必要があるだけです。シリアライゼーションには、次を使用できます。
そして、次のjsonを取得します。
デシリアライズについてはわかりません。要件はかなり一般的であるように思われるので、フォーラムで質問したいと思いました。何か案は?
要約すると、子オブジェクトへの参照 (多対 1) を持つ親オブジェクトがあります。親に子供のすべての情報を提供すれば、すべてうまくいきます。しかし、ちょっと待ってください。子供の ID があれば、親を安全に保つのに十分なはずです。子の ID だけで親を保存しようとすると、次の例外が発生します。
org.hibernate.TransientPropertyValueException: オブジェクトが保存されていない一時インスタンスを参照しています - フラッシュする前に一時インスタンスを保存します
何かご意見は?
アグスティン
2013 年 1 月 27 日更新: この問題は Hibernate に起因するようです。製品とカテゴリがあるとします。この関係は、製品がカテゴリへの参照を持っていることです (多対 1 の関係)。以前にデータベースに保存されたカテゴリを指定します。商品を作成することはできず、商品を作成するためにカテゴリの ID を指定するだけです。Hibernate は製品を作成するためにバージョンを確認しませんが、バージョンも必要になります。下記参照:
それは失敗します。ただし、カテゴリのバージョンのコメントを外すと、製品が作成されます。また、Hibernate はデータベースに対して追加のクエリを実行し、そのカテゴリを要求します。
ここで 2 つの質問:
- 最後にそれが見えないのに、Hibernate がフィールド バージョンを必要とするのはなぜですか?
- Hibernate がカテゴリを要求する追加のクエリを実行するのはなぜですか?
あなたの考え?
actionscript-3 - JSON ファイルを作成してディスクに保存する
任意のオブジェクトの JSON ファイルを作成してディスクに保存する方法。数日後、それを取り戻しますか?
android - コードを難読化した後、FlexJsonデシリアライザーが機能しない
FlexJsonは、オブジェクト内にオブジェクトがある深いシリアライズでうまく機能しています..しかし、proguardでビルドを難読化した後、デシリアライズされたクラスがStringのクラスオブジェクトだけを返すことがわかります..または、local.propertiesまたはプロジェクトで変更する必要があるもの。プロパティ
はい、コンソールと ANT を使用して、(android update ....--library) がライブラリ コードのフォルダーのパスにリンクしているコードを更新しています。問題は、ライブラリを参照していないことです。親切にそれを行う方法を教えてください??
または、他の問題があれば助けてください!!!
私のproguard.cfgで私はこれを書いています
ClassNotFoundException をスローするのではなく、シリアライズ、ディープシリアライズ、デシリアライズが機能しない
そして、これを除いてすべてが適切に実行されているコードを既に難読化しています
android - Android での Json のデシリアライズ
私のバックエンドには、複数のトリップを持つクラス User があります。これらの旅行には複数のユーザーがいます。これは循環参照です。
このコードを REST サービスで使用して、ユーザー オブジェクトをシリアル化します。
私のAndroidアプリでは、次のことを行います:
循環参照の例外について何ができますか? これを機能させる別の方法はありますか?
java - flexjson を使用したオブジェクトのシリアル化
flexjson
ライブラリを使用しようとしています。しかし、私のオブジェクトでは、使用する必要があります:
com.google.api.client.util.DateTime
これには、パラメーター コンストラクターがありません。私はいつもNoSuchMethodException
メッセージを受け取ります:Flexjson will instantiate any protected, private, or public no-arg constructor.
ソースがあり、それを使って何かをしようとしています。コードは次のとおりです:
clazz.getDeclaredConstructor()
空のコンストラクターがないため、例外がスローされています。それらの署名としましょう:
DateTime(long timestamp)
?
このライブラリでこの種の問題に遭遇した人はいますか? たぶん、他のものを使用することを提案できます。によって生成されたオブジェクトをシリアル化するために使用していますGoogle Cloud Endpoints
。多分私は別のアプローチでそれを行うことができますか?