問題タブ [dbxjson]
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 - DBXJSON を使用して、エスケープ文字や特殊文字を含む文字列を JSON との間で変換するにはどうすればよいですか?
エスケープ文字を含む文字列とTJsonString との間の変換に問題があります。(Delphi XE 2、Update 4、Hotfix 1 を使用しています)。
注: 私はSuperObjectに精通していますが、私の要件は DBXJSON ユニットを使用することです。
ToString() メソッドを介して JSON 表現を返すときに、TJSONString が正しくエスケープされていないようです。
私は何を間違っていますか?また、特殊文字を含む文字列を正しいJSON表現に/から正しく変換するにはどうすればよいですか?
おそらく私は何かを見逃していましたが、次の Q&A のどれもこれに直接対処していないようです。
- Delphi デコード json/utf8 エスケープ テキスト
- オブジェクトのシリアル化に使用できる XE2 用の Delphi JSON ライブラリ
- Delphi: JSON 配列
- Delphi XE2でネストされたJSONオブジェクトを解析するには?
- Delphi 2012 を使用したネストされた json オブジェクトの逆シリアル化
編集:
結局のところ、以下の例は実際に期待どおりに機能していました。
私には明確ではありませんでしたが、コンストラクターを介して TJSONString を作成し、それを TJSONObject に追加すると、ToString() メソッドはエスケープされた 表現を返します。ただし、TJSONObjectを解析した後、ToString() メソッドはエスケープされていない表現を返します。
その他の唯一の注意点は、以下のサンプル コードの EscapeString() 関数が二重引用符を処理していたことです。ここでは二重引用符を使用していませんが、私の他のコードの一部は二重引用符を使用しており、TJSONString が既にその文字をエスケープしているため、解析が失敗しました。サンプル コードを更新して、この処理を EscapeString() 関数から削除しました。これは、私自身のクラスで使用しているものです。
答えてくれた@Linasにもう一度感謝します。
生の文字列値:
DBXJSON が生成するもの (エスケープなし):
UN エスケープされたテキストの解析が失敗する:
DBXJSONが生成することを期待するもの:
ESCAPED テキストの解析 ( INVALID ) (解析するテキストはJSONLintで検証済み):
TJSONString が正しく処理しているように見える特殊文字は、二重引用符 (") だけであることに気付きました。
私が使用しているコードは次のとおりです。
delphi - Delphi XE3 DBXJSON の問題
Datasnap サーバーは Delphi XE2 で動作していましたが、Delphi XE3 にアップグレードしたため、次の問題が発生しています。
たとえば、この関数は JSON を受け取り、それを返します。
次のようなリクエストを行う場合:
Delphi XE2 の場合: {"result":["\"{\u201Cinode\u201D:\u201D221\u201D,\u201Ditdmov\u201D:\u201D22\u201D}\""]}
Delphi XE3 の場合: {"エラー":"モジュール 'Project1.exe' のアドレス 00660588 でアクセス違反。アドレス 49F99879 の読み取り"}
TJSONObject を受け取る何百もの関数があり、それらすべてがエラーを表示しているため、誰かがこの問題を解決できることを願っています。
ありがとうございました
json - スーパーオブジェクトまたは DBXJSON を使用して正しい JSON ファイルを作成する際の問題
私は Delphi XE2 を使用しています。次の json 構造体を作成します。
スーパーオブジェクトでいくつかのテストを行いましたが、配列の最初の要素が2番目の要素と等しいため、まだ正しい結果に達していません。私の困難は反復と最適化にあります。これは私が取り組んでいるコードです:.
delphi - Delphi XE5 DBXJSon TJSONArray リーク
タイマー ループで DBXJSON TJSONArray を更新していますが、ライブラリを正しい方法で使用していないと思われるアルゴリズム リーク メモリが検出されました。ここで何が悪いのですか?
配列 COMANDASTOT をリロードする必要があります。この配列は、データを置き換えてデータを取得するために使用する他のスレッドによって使用されます。
アイデアは、TJSONArrayに格納されている情報を更新することですが、配列を更新すると、これがリークし始めます
ありがとう!