SQLiteでは、json()
関数は、JSONのように見える生のテキストを実際のJSONに変換します。
関数を呼び出すときに、引数としてJSON文字列を渡します。 json()
次に、関数は引数が有効なJSON文字列であることを確認し、そのJSON文字列の縮小バージョンを返します。引数が整形式のJSON文字列でない場合、エラーがスローされます。
ただし、json()
関数は、値が有効なJSONであるかどうかをテストするようには設計されていません。これを行うには、json_valid()
を使用します 代わりに機能します。
構文
json(X)
ここでX
チェックして最小化する値です。
例
SELECT json('{ "a": 1 }');
結果:
{"a":1}
この場合、有効なJSONドキュメントを提供したので、その縮小バージョンが返されました(不要なスペースが削除されました)。
より多くのスペースを持つより大きなJSONドキュメントを使用する例を次に示します。
SELECT json('{
"_id": 1.0,
"title": "Animals",
"body": "blah blah 1",
"tags": [
"cats",
"dogs"
]
}');
結果:
{"_id":1.0,"title":"Animals","body":"blah blah 1","tags":["cats","dogs"]}
json()
関数は、JSONを別の関数に渡す必要がある場合に役立ちます。前述のように、JSONのように見える生のテキストを実際のJSONに変換するため、他の関数に渡す必要がある場合に最適です。他の関数は、値を文字列ではなくJSONとして解釈します。
無効なJSON
無効なJSON文字列を渡すと、エラーが発生します:
SELECT json('{oops!');
結果:
Runtime error: malformed JSON
重複ラベル
JSONドキュメントに重複するラベルが含まれている場合、それらが常に保持される保証はありません。
執筆時点では、重複したラベルは保持されます。ただし、SQLiteのドキュメントでは、これはSQLiteの将来のバージョンで変更される可能性があるため、重複するラベルはサイレントに削除されるとアドバイスされています。
ラベルが重複しているJSONドキュメントを使用する例を次に示します。
SELECT json('{ "a": 1, "b": 1, "a" : 2 }');
結果:
{"a":1,"b":1,"a":2}
この場合、私のJSONドキュメントにはa
という2つのラベルがあります 。どちらも私のSQLiteインストール(バージョン3.38.0)で保持されていましたが、将来のSQLiteバージョンでは常にそうであるとは限りません。