PostgreSQLを使用して、json列の「\」をエスケープするにはどうすればよいですか?

user3228515

Postgres 9.5を使用していて、タイプ 'json'の列( "info")があります...この挿入を実行しようとしています:

INSERT INTO table ( info )
VALUES (
  '{"entry":"((\+)[0-9]+)"}'
)

しかし、私はこのエラーを受け取ります:

ERROR:  invalid input syntax for type json
DETAIL:  Escape sequence "\+" is invalid.

これ\+はエスケープシーケンスとして解釈されますが、実際にはそれを自分の価値の一部として望んでいます。

エヴァン・キャロル

一般に、

  • jsonb_build_objectオブジェクトの構築に使用するキーと値がある場合
  • 文字列からキャストするリテラルJSONオブジェクトを作成している場合は、それが適切である必要があります。適切なJSON文字列にはエスケープが必要\です。

説明

PostgreSQLはこれを引用されていません:それはちょうど次のようなJSON implimentationだRFC 7159

文字列は引用符で始まり、引用符で終わります。エスケープする必要のある文字(引用符、円記号、および制御文字(U +0000からU + 001F))を除き、すべてのUnicode文字を引用符で囲むことができます。[...]したがって、たとえば、単一の逆スラッシュ文字のみを含む文字列は、よりコンパクトにとして表すことができます"\\"

したがって、文字通りの形式ではこのようになります。

CREATE TABLE tbl
AS
  SELECT '{"entry":"((\\+)[0-9]+)"}'::jsonb AS info;

PostgreSQLでのドル見積もりにはエスケープは必要ありませんが、ここでは役に立ちません。

ドル引用符で囲まれた文字列内では、エスケープする必要なしに一重引用符を使用できることに注意してください。実際、ドルで引用された文字列内の文字がエスケープされることはありません。文字列の内容は常に文字通りに記述されます。バックスラッシュは特別なものではなく、開始タグに一致するシーケンスの一部でない限り、ドル記号でもありません。

したがって、はJSONで有効な文字列ではないため、これは機能しません\+ただし、jsonタイプを使用していなくても機能します。

SELECT '{"key":"\"}'::jsonb;
ERROR:  invalid input syntax for type json
LINE 1: SELECT '{"key":"\"}'::jsonb;
               ^
DETAIL:  Token ""\"}" is invalid.
CONTEXT:  JSON data, line 1: {"key":"\"}

ただし、を使用to_jsonb()して文字列をJSONエスケープすることができます。

SELECT FORMAT( $${%s:%s}$$, to_jsonb(k), to_jsonb(v) )::jsonb
FROM ( VALUES
  ('key', '\' )
) AS t(k,v);

しかし、これでも悪い考えです。なぜなら、キーと値があれば、を使用できるjson_build_objectからです。

SELECT jsonb_build_object( k, v )
FROM ( VALUES
  ('key', '\' )
) AS t(k,v);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

文字列内の文字を適切にエスケープして、CでJSON準拠の形式を取得するにはどうすればよいですか?

分類Dev

Javaでエスケープされた「\」を使用してjsonデータからURLを抽出するにはどうすればよいですか

分類Dev

Json文字列からエスケープ文字を削除するにはどうすればよいですか?

分類Dev

プロセスでJSONをエスケープせずに、「生の」JSONを含む文字列メンバーを使用して型をシリアル化および逆シリアル化するにはどうすればよいですか?

分類Dev

JSONで文字列をエスケープするにはどうすればよいですか?

分類Dev

エスケープせずにJavaScript文字列で\を使用するにはどうすればよいですか?

分類Dev

Ansiエスケープシーケンスを使用してxtermの色を変更するにはどうすればよいですか?

分類Dev

レクサーに正規表現を使用して文字列リテラルをエスケープするにはどうすればよいですか?

分類Dev

トリガーを使用してmysqlで文字列をエスケープするにはどうすればよいですか?

分類Dev

bash eval文字列で16進エスケープを使用するにはどうすればよいですか?

分類Dev

逐語的な文字列でエスケープ文字を使用するにはどうすればよいですか?

分類Dev

Pythonのurllib.urlencode()を使用しているときに、特定の文字をエスケープするにはどうすればよいですか?

分類Dev

SQLクエリを使用してHanaDBパスワードの特殊文字をエスケープするにはどうすればよいですか?

分類Dev

mySQLを使用してエスケープされた文字列を検索するにはどうすればよいですか?

分類Dev

Applescriptを使用してパス内のスペースをエスケープするにはどうすればよいですか?

分類Dev

Bashでjson変換の引用符をエスケープするにはどうすればよいですか?

分類Dev

太字などのエスケープコードを使用してマンページを生成するにはどうすればよいですか?

分類Dev

日付スクリプトを使用して、AutoHotKeyの「+」文字をエスケープするにはどうすればよいですか?

分類Dev

ZSH-コロン「:」文字/エスケープコロン文字を使用して配列を結合するにはどうすればよいですか?

分類Dev

ケースを使用して範囲をループするにはどうすればよいですか

分類Dev

文字列内のエスケープ文字を「解釈」するにはどうすればよいですか?

分類Dev

文字列変数の引用符をエスケープするにはどうすればよいですか?

分類Dev

AngularJSを使用しているときに、中括弧をエスケープしてページに表示するにはどうすればよいですか?

分類Dev

かみそりのエスケープ文字を使用して動的な内部CSSを作成するにはどうすればよいですか?

分類Dev

かみそりを使用してファイル拡張子の期間をエスケープするにはどうすればよいですか?

分類Dev

PostgreSQLを使用してクエリから列属性を取得するにはどうすればよいですか?

分類Dev

エスケープ文字を使用してString.matches()の正規表現を適切に作成するにはどうすればよいですか?

分類Dev

SEFフォームのURLを使用して、疑問符をエスケープするにはどうすればよいですか?

分類Dev

ケースに応じて、postgreSQLを使用して複数の値を複数の変数に選択するにはどうすればよいですか?

Related 関連記事

  1. 1

    文字列内の文字を適切にエスケープして、CでJSON準拠の形式を取得するにはどうすればよいですか?

  2. 2

    Javaでエスケープされた「\」を使用してjsonデータからURLを抽出するにはどうすればよいですか

  3. 3

    Json文字列からエスケープ文字を削除するにはどうすればよいですか?

  4. 4

    プロセスでJSONをエスケープせずに、「生の」JSONを含む文字列メンバーを使用して型をシリアル化および逆シリアル化するにはどうすればよいですか?

  5. 5

    JSONで文字列をエスケープするにはどうすればよいですか?

  6. 6

    エスケープせずにJavaScript文字列で\を使用するにはどうすればよいですか?

  7. 7

    Ansiエスケープシーケンスを使用してxtermの色を変更するにはどうすればよいですか?

  8. 8

    レクサーに正規表現を使用して文字列リテラルをエスケープするにはどうすればよいですか?

  9. 9

    トリガーを使用してmysqlで文字列をエスケープするにはどうすればよいですか?

  10. 10

    bash eval文字列で16進エスケープを使用するにはどうすればよいですか?

  11. 11

    逐語的な文字列でエスケープ文字を使用するにはどうすればよいですか?

  12. 12

    Pythonのurllib.urlencode()を使用しているときに、特定の文字をエスケープするにはどうすればよいですか?

  13. 13

    SQLクエリを使用してHanaDBパスワードの特殊文字をエスケープするにはどうすればよいですか?

  14. 14

    mySQLを使用してエスケープされた文字列を検索するにはどうすればよいですか?

  15. 15

    Applescriptを使用してパス内のスペースをエスケープするにはどうすればよいですか?

  16. 16

    Bashでjson変換の引用符をエスケープするにはどうすればよいですか?

  17. 17

    太字などのエスケープコードを使用してマンページを生成するにはどうすればよいですか?

  18. 18

    日付スクリプトを使用して、AutoHotKeyの「+」文字をエスケープするにはどうすればよいですか?

  19. 19

    ZSH-コロン「:」文字/エスケープコロン文字を使用して配列を結合するにはどうすればよいですか?

  20. 20

    ケースを使用して範囲をループするにはどうすればよいですか

  21. 21

    文字列内のエスケープ文字を「解釈」するにはどうすればよいですか?

  22. 22

    文字列変数の引用符をエスケープするにはどうすればよいですか?

  23. 23

    AngularJSを使用しているときに、中括弧をエスケープしてページに表示するにはどうすればよいですか?

  24. 24

    かみそりのエスケープ文字を使用して動的な内部CSSを作成するにはどうすればよいですか?

  25. 25

    かみそりを使用してファイル拡張子の期間をエスケープするにはどうすればよいですか?

  26. 26

    PostgreSQLを使用してクエリから列属性を取得するにはどうすればよいですか?

  27. 27

    エスケープ文字を使用してString.matches()の正規表現を適切に作成するにはどうすればよいですか?

  28. 28

    SEFフォームのURLを使用して、疑問符をエスケープするにはどうすればよいですか?

  29. 29

    ケースに応じて、postgreSQLを使用して複数の値を複数の変数に選択するにはどうすればよいですか?

ホットタグ

アーカイブ