ASTER::ACTION::JSON::Targetted JSON Pointer::Is Array::Push_back with a String Data

using JSON POINTER..

配列の要素終端に文字列データを 1 つ追加、事前にターゲット設定が済んでいる、ターゲットのデータ型が配列であること。

Push_back 命令が正常に実行された場合、配列要素数は一つ増加します。

パラメータ.1

e.g. “日本語表現” » 文字列データを配列に追加します

注意点.1 改行など制御文字

CF25 はエクスプレッションエディタ経由で送信される文字列データを暗黙的にエスケープ処理する仕様があります。

  e.g.    "改行\r\n日本語\s\t"
  

上記文字列は CF25 の暗黙的エスケープ処理が実行される。受け取り後のデータは “改行\r\n日本語\s\t” となります。

“\r\n” が文字列化されるため、このデータ改変は都合が悪いことがあります。

CF25 独自の改行処理である NewLine$ を使えば受け取り後のデータはエスケープ処理が施されていません。

e.g. “TEST” + NewLine$ + “あいう” » “TEST\r\nあいう”

JSON の文字列仕様的に \r\n にはエスケープ不要。( \s\t にはエスケープ処理が必要 )

本来 JSON 仕様に沿った内容のデータを ASTER へ送信する必要があり、ASTER 側で受け取ってから送信内容を逐一チェックはしません。 ( 技術的な不可能ではなく処理効率を優先 )

エスケープ処理が必要なデータは多数ありますが CF25 の暗黙的エスケープ処理では改行 \r\n とかはエスケープしないで欲しいけど \s\t は逆にエスケープ処理がありがたい場合もあり、ちょっと複雑な文字列送信事情となっています。

JSON の文字列型に含めることができるデータ仕様について事前にチェックしてから、次に実際のデータ送信後、JSON Pointer でダンプ出力して内容確認することを推奨します。

ディレクトリパスを保存する場合、Windows 標準だと “c:\test” というパスを CF25 から ASTER に送信した場合、“c:\test” と JSON で保存されます。例えばこの文字列をそのままエクスプローラに渡してもエスケープ処理が邪魔をするためエラーとなります。エクスプローラではなくインターネットブラウザだったらエラーも無くディレクトリが閲覧できます。

問題はエクスプローラで発生するエラー、これを回避するための一つの方法として、CF25 から ASTER へ送信する文字列を “c:/test” とすること。これだと暗黙的エスケープ処理が発生せず、かつそのまま JSON 文字列で保存しても仕様に違反してない、さらにその文字列をエクスプローラに渡しても正常に解釈されエラーになりません。

JSON の文字列仕様だと直接 “c:\test” と保存すれば違反なので、CF25 の暗黙的エスケープ処理が悪いわけでも無いのですが、これは Windows エクスプローラの仕様が悪い気もします。実際ブラウザでは “c:\test” も表示できますし “c:/test” も表示できます。

正規表現を利用すれば “c:\test” を “c:\test” に変更したり “c:\test” を “c:/test” に変更は容易なので、ぜひ正規表現を使って解決してください。