問題タブ [superobject]
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.
delphi - 可変長配列の SuperObject JSON をシリアライズすると、FastMM で「解放後に変更されました」というエラーが発生する
可変長配列の SuperObject JSON をシリアライズすると、FastMM で「解放後に変更されました」というエラーが発生する
可変長配列のシリアル化 (逆) をテストするための次のコードがなぜなのか疑問に思っています。
このFastMM4「解放後にブロックが変更されました」エラーが発生します(プログラムを閉じるとき-シリアライゼーション+デシリアライゼーション自体が期待される結果をもたらします):
TestSimpleVarArray は、ボタンのクリックから 1 回呼び出されます。
何か間違ったことをしているのですか、それとも SuperObject コードにバグがありますか?
FastMM4 エラー ログを使用して追跡しようとしましたが、わかりませんでした (ジェネリック、RTTI、およびインターフェイスの経験が限られています)。
SuperObject コードを Delphi XE2 用にコンパイルするように変更したことを「告白」しなければなりません (FHeapData を FValueData に変更しました)。
手がかりはありますか?
ティア
delphi - 設計時の TWebActions を TObjects の構造にリンクする方法は?
TWebModule の設計時に定義され、OnAction イベントに結合された TWebAction アイテムの数が増え続ける Web サービスがあります。
'TSuperObject'.S['errormessage'] := lErrMsg;
リクエストは URL を介した HTTP GET であり、レスポンスは「手作りの」JSON データです。つまり、JSON データを使用してこれを HTTP POST リクエストに変更したいなどのステートメントで実行時に構成され、すべてのリクエスト/レスポンス JSON 構造が (逆) シリアル化されます。 / SuperObjects TSuperRttiContext AsJSONおよびAsTypeメソッドを使用して、適切なオブジェクト (場合によってはレコード) に変換します。
新しい「Objects to be JSON (de)serialized」を設計時の TWebactions にマッピング/リンクするためのデータ構造を作成するにはどうすればよいですか? これらのオブジェクトはすべて異なり (一部のプロパティは共通の祖先にある可能性があります)、オブジェクトまたはレコードのプロパティ自体を含む場合があります ( FData: Array of TSubObject
[どの SuperObject が正常にシリアル化できるか] など)。
注: タイミング統計 (これも維持する必要があります) を収集するために使用した簡単な列挙型が既にありますが、これも統合できます。
基本的に、新しい TWebAction が追加されるたびにメンテナンスを行う必要がある場所の数を最小限に抑えたいと考えています。
delphi - メタクラスを介してインスタンス化されたインスタンスの JSON オブジェクトをシリアル化する
SuperObject ライブラリには、オブジェクトをシリアル化するための一般的なメソッドがあります。
しかし今、私はメタクラスのインスタンスを扱っています。
これはオブジェクト構造です:
私が今試してみると:
TReqBase をシリアル化します: TReqLoginlJSON.AsString = '{"token":-12346789}'
をシリアル化したいです。
試した:
lContext.AsJson< TReqLogin >(lRequestBase); 動作しません: 互換性のないタイプ) [さらに、ルーチンで可能なすべての RequestClass タイプをリスト/処理する必要があります]
lContext.AsJson< lRequestBase.ClassType >(lRequestBase) どちらでもない: E2531 メソッド 'AsJson' には明示的な型引数が必要です
lRequestBase を TReqLogin、TReq としてシリアル化する方法はありますか? それらすべてをコーディングする必要はありませんか?
delphi - SuperObject は null 文字列を処理できません
一部の JSON シリアライザnull
は、空の文字列データ フィールドを返します。
SuperObject を使用して ISuperObject を作成しています。
これは、テキストを含む文字列を持つオブジェクトを返します'null'
。
明らかにこれは、SuperObject が引用符を気にしないためです ("searchtext": a
と同じ結果が得られます"searchtext": "a"
)。
980 行のトークナイザー ルーチンに飛び込む前に、解決策はありますか?
私は次のように考えています(どちらか/または):
JSON オブジェクトから null データフィールドを除外します
空の文字列を返す
他のすべてが失敗した場合でも、私はまだできる
開発者の 1 人からのアプリからのリクエストのみを処理する必要があるためですが、それは絶対確実ではありません。(いいえ、 Mono が datacontract を処理する方法にバグがあるため
、彼は を抑制することができません。)null
ところで、私はここで述べた動作を正確に経験していますが、SuperObject コードの別の部分で、その回避策は機能しません。
json - SuperObject で文字列を解析すると、疑問符が大量に表示されるのはなぜですか?
Delphi 7 で SuperObject を使用してこの文字列を解析しようとしています。
しかし、メモの結果は次のようになります。
"???????????????????????????????????????????????????? ???}」
私は何を間違っていますか?
json - JSON を解析してその場でイベントをトリガーする方法はありますか?
現在、私は SuperObject を使用して (サーバーから受信したときに) JSON データを解析し、それをクライアント データセットにダンプしています。サーバーから非常に大量のデータが送信される可能性があります。現在、まずその JSON データを に解析してからISuperObject
、それを繰り返し処理してクライアント データセットに入力する必要があります。
私が疑問に思っているのは、生データが解析されているときにイベントをトリガーする二重読み込みをバイパスする方法があるかどうかです。たとえば、パーサーが新しいオブジェクトの開始を検出するとすぐにイベントをトリガーし、その場で対応するオブジェクトを準備します。または、配列を解析するときに、新しいデータセット レコードを準備できます。
その理由は、非常に大きなデータセットの場合、数秒かかる場合があり、使用する前に解析が完了するまで待たなければならないからです。解析中にデータを取得すると、そのデータをその場ですぐに利用できます。
私はすでに、ページあたり 200 ~ 500 レコード (数百万のレコード) で多くの列を持つページネーションを実装しています。応答性に関して言えば、ページネーションはまだ完全なニーズを解決していません。
独自の完全なパーサーを作成することなく、SuperObject またはその他の既知のメカニズムを使用して、これを行うにはどうすればよいでしょうか?