2017-05-20 19 views
3

Suave.Json.mapJsonは、入力JSONをオブジェクトにマッピングしてから、関数の出力をJSONにマップします。json入力をSuaveで出力しますが、出力されません

問題は私が関数にマップする方法には満足していますが、私はJSONに出力をシリアル化するのではなく、JSON文字列レスポンスを返す必要があります。これどうやってするの?

現在、私は出力を2回シリアライズしています。これまでの私のコード:

let executeQuery : Query -> string = //Query is my deserialised json input, the return value is a json string 
let app = POST >=> path "/graphql" >=> Json.mapJson executeQuery >=> setMimeType "application/json; charset=utf-8" 
startWebServer defaultConfig app 

答えて

4

あなたはSuave source codeを見れば、あなたはmapJsonmapJsonWith fromJson toJsonの短縮形であることがわかります。 fromJsontoJsonの関数はデフォルトのJSONデシリアライザとシリアライザですが、代わりに独自のデシリアライザとシリアライザを作成してもかまいません。idを使用して「この方向を変更せずにマップする」と言うことができます。例えば、私はこれをテストしていません

let oneWayMapJson = mapJsonWith fromJson id 

注意、ちょうどスタックオーバーフローの回答ボックスにを入力するので、いくつかの調整が必要な場合があります。私は今、この答えを展開する時間がありませんが、これよりも多くの助けが必要な場合は、ベアボーンの答えが分かります。私に知らせてください、そして、私はあなたに明日いつかもっと助けを与えようとします。

+1

ありがとう、私はこれからそれを考え出した。文字列の出力をバイト配列に変換する必要があるため、idを使用することはできません。 'let oneWayMapJson = Json.mapJsonWith Json.fromJson UTF8.bytes' – Kurren

関連する問題