ペイロードでの正規表現の使用 (Using regular expressions in payloads)
いくつかのオペレーションでは、次のように正規表現を使用できます。サポートされている正規表現のセットは、POSIX 拡張です (詳細は こちらを参照してください)。
例 :
POST /v2/op/query
{
"entities": [
{
"idPattern": ".*",
"type": "Sensor"
}
]
}
正規表現言語では、バックスラッシュ (\
) を使用できます。たとえば、SENSOR\d{2}
は、SENSOR と2桁の数字が続く文字列と一致します。ただし、\
は JSON の特殊文字です。JSON 仕様によれば、それは \\
でエンコードする必要があります。
例 :
POST /v2/op/query
{
"entities": [
{
"idPattern": "SENSOR\\d{2}",
"type": "Sensor"
}
]
}
シェルを使用してリクエストを送信すると、問題がさらに楽になる可能性があります。たとえば、複数行の curl を使用する場合、シェルレベルで \
をエスケープする必要があります。例えば :
curl localhost:1026/v2/op/query -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
{
"entities": [
{
"idPattern": "SENSOR\\\\d{2}",
"type": "Sensor"
}
]
}
EOF
つまり、シェルレベルの SENSOR\\\\d{2}
文字列は、Orion の JSON 解析段階の後の正規表現 SENSOR\d{2}
に順番に対応するペイロードレベル (つまり、ワイヤを介して送信される実際の HTTP リクエスト) で SENSOR\\d{2}
に変換されます。ただし、ペイロードにファイルを使用する場合、シェルのエスケープは不要です。つまり、次のようになります :
curl localhost:1026/v2/op/query -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @payload.json
次の payload.json ファイルを使用します :
{
"entities": [
{
"idPattern": "SENSOR\\d{2}",
"type": "Sensor"
}
]
}
これに関する詳細は github の次の issue コメントに記載されています。