ロジックをデータとしてJSONで表現する
質問
ビジネス上の理由から、いくつかの条件付きロジックを外部ファイル(できればJSON)に外部化する必要があります。
単純なフィルターバイシナリオは、以下のようにノードを追加することで処理できます。
"filter": [
{
"criteria": "status",
"value": "open",
"condition": "=="
}
]
複数の条件を配列の追加値で処理することができた。
"filter": [
{
"criteria": "status",
"value": "open",
"condition": "=="
},
{
"criteria": "condition2",
"value": "value2",
"condition": "=="
}
]
しかし、ANDやORを含む複雑な条件を扱う場合は、少し混乱します。
質問:JSON内でそのようなロジックを表現するための標準化された(あるいは広く受け入れられた)フォーマットはありますか?もしあなた次第であれば、どのようにそれを行いますか?
注:最初の回答は編集可能なwikiにしたので、それを感じたら誰でも改善することができます。
どのように解決するのですか?
もし、あなたが が必要です。 を実装しなければならない場合、Lisp の "S-expressions" のようなものをお勧めします。 条件は、プレーン オブジェクトか、最初のエントリがそれらを結合する論理演算である配列のどちらかにすることができます。
たとえば
["AND",
{"var1" : "value1"},
["OR",
{ "var2" : "value2" },
{ "var3" : "value3" }
]
]
は
var1 == value1 AND (var2 == value2 OR var3 == value3)
.
一貫性よりも簡潔さを重視するのであれば、オブジェクトが複数のプロパティを持つことも可能で、その場合は暗黙のうちにANDで結合されることになります。 例えば
{ "a": "b", "c": "d" }
は次のように等価です。
["AND", { "a": "b" }, { "c": "d" }]
. しかし、(この例のように)前者の構文では条件を忠実に表現できない場合があります。条件を翻訳したり、ダミーのプロパティ名を使用するなどの追加のトリックが必要になります。 後者の構文は常に機能するはずです。
関連
-
[解決済み] JSONDecodeError: 期待される値:行1列1
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] JSONデータをファイルに書き込むにはどうしたらいいですか?
-
[解決済み] JSONのXSLT対応
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】jq: 文字列で配列のインデックスを作成できない
-
[解決済み] Kubernetes / kubectl - 「コンテナ名を指定する必要があります」とありますが、そのような感じですか?
-
[解決済み] Elasticsearchでネストしたオブジェクトを検索する方法
-
[解決済み] VBScriptによるJSONのデコード/エンコード
-
[解決済み] UnixツールでJSONをパースする
-
json.loadsがエラーを報告します。二重引用符で囲まれたプロパティ名を期待:行1列2(char 1)
-
[解決済み] JSONファイルのMongoimport
-
[解決済み] bashの変数をjqに渡す
-
[解決済み] JSONオブジェクトをBufferに変換し、BufferをJSONオブジェクトに戻す。
-
[解決済み] react nativeでローカルのJSONファイルからデータを取得するには?