私はPrologでシンプルなWebサービスを開発していて、ユーザーにJSON形式のデータで応答したいと考えていました。良い機能はreply_json_dict/1
です。これは辞書をとり、よく書式設定されたJSON本体でHTTP応答で変換します。swi-prologで辞書を使用しています
私の問題は、レスポンス辞書自体を構築することがやや面倒であるということです。たとえば、データを返すと、データIDがありますが、データプロパティー(おそらくバインドされていない変数)があるかもしれません。私は簡単にアプローチを探しています...正常に動作するので、出力はProps
がバインドされているかどうかによって、{ "id" : "III" }
または{ "id" : "III", "attributes" : "AAA" }
ですが、
OutDict0 = _{ id : DataId },
(nonvar(Props) -> OutDict1 = OutDict0.put(_{ attributes : Props }) ; OutDict1 = OutDict0),
reply_json_dict(OutDict1)
:現時点では私は、次の操作を行います。主な理由は、より多くのオプションのキーと値のペアを追加する必要がある場合、私は以下のような複数の意味を持つようになるからです:
OutDict0 = _{ id : DataId },
(nonvar(Props) -> OutDict1 = OutDict0.put(_{ attributes : Props }) ; OutDict1 = OutDict0),
(nonvar(Time) -> OutDict2 = OutDict1.put(_{ time : Time }) ; OutDict2 = OutDict1),
(nonvar(UserName) -> OutDict3 = OutDict2.put(_{ userName : UserName }) ; OutDict3 = OutDict2),
reply_json_dict(OutDict3)
これは間違っているようです。もっと簡単な方法はありますか?
乾杯、 ヤツェク代わりに辞書をいじりの
これらの入力であなたが解決したことは良いことです!まだ質問が残っています:あなたが必要なリストをすでに持っているときに、なぜディクテーションを作成するのですか? dictsはPrologの標準的な機能ではないため、dictを使用するたびにアプリケーションの移植性が低下することを考慮してください。 – mat
良い点ですが、現時点での移植性についてはあまり心配していません。 dictについての良い点は、キーがユニークなので、JSONオブジェクトへのマッピングがより自然なことです。 JSON標準ではユニークではないキーが許可されていますが、多くのライブラリではそうではないため、ユニークなキーを使用する方がよいことに注意してください。 – Jacek
'findall'の最初の引数に' Key = Value'の前後にかっこは必要ありません。 –