フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: [RSP-20404] TJson.format() output invalid CRLF
kita--
メンバー
投稿数: 30
[RSP-20404] TJson.format() output invalid CRLF
on: 2018/04/29 11:30 Sun

こんにちは。
TJson.format 関数が、勝手に改行とインデントを入れた文字列を返すので、QCに入れました。
QCに入れるのが初めてなので、あれで伝わるのか心配です。

procedure JsonFormatTest;
var jo:TJsonObject;
j:TJson;
begin
jo := TJsonObject.Create;
jo.AddPair('a', 'x="a,b"');

j := TJson.Create;
ShowMessage( j.Format(jo) );
end;

JSON オブジェクトに、名前が a、値が x="a,b" というペアを作って、
TJson.Format 関数に渡すと、値のコンマの後ろで勝手に改行と次の行の頭にインデントが入ってしまいます。
値の中のダブルクォーテーションのエスケープが無視されてしまっているようです。

{
"a":"x=\"a,
b\""
}

↑こんな風な出力になる。
こんな↓風になるのが正解と思う。

{
"a":"x=\"a,b\""
}

RESTを使ってサーバーとデータセットのやり取りをする処理を書いていて、
その中の BLOB (sub type text)フィールドに、XMLの文字列を入れていたら、勝手に中身が変わってました ((+_+))

TJson.Format 関数の中の最後の処理(A)を if の後ろに移動するだけで良いのかなと思っています。


isEscape := (c = '\') and not isEscape; // <- (A)
if not isEscape and (c = '"') then
isInString := not isInString;
// (A) をここに移動
ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.018 sec.