web-dev-qa-db-ja.com

Azure関数でJsonを解析する方法

「この関数でAzure関数を作成しました。JSONを返すAPIを呼び出します。このJSONをオブジェクトに解析して関数で使用できるようにします。関数がわからないように見えるため、Newton.JSONを使用できませんこれ。どうすればJSONを解析できますか?」

15
Boris Pluimvee

Azure Functionでは、最初にNewtonSoft.JSONへの参照を追加する必要があります。これは「Newtonsoft.Json」を介して実行できます。引用符を忘れないでください!!!

あなたがnewtonsoft経由で通常のシリアル化を使用できるよりも:

var response = await client.GetAsync("<url>");
var json = await response.Content.ReadAsStringAsync();
var o= JsonConvert.DeserializeObject<"Type">(json);
0
Martin Tirion

JsonNetを使用してオブジェクトをシリアル化/逆シリアル化するための完全なAzure Functionソースコードを次に示します。

#r "Newtonsoft.Json"

using System.Net;
using Newtonsoft.Json;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    dynamic body = await req.Content.ReadAsStringAsync();
    var e = JsonConvert.DeserializeObject<EventData>(body as string);
    return req.CreateResponse(HttpStatusCode.OK, JsonConvert.SerializeObject(e));
}

public class EventData
{
    public string Category { get; set; }
    public string Action { get; set; }
    public string Label { get; set; }
}

サンプル入力(リクエストボディ):

{
    "Category": "Azure Functions",
    "Action": "Run",
    "Label": "Test"
}

サンプル出力:

"{\"Category\":\"Azure Functions\",\"Action\":\"Run\",\"Label\":\"Test\"}"

上記の答えは、JSONではなく文字列を返すことです。次のように回答を変更することをお勧めします。

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    dynamic body = await req.Content.ReadAsStringAsync();
    var e = JsonConvert.DeserializeObject<EventData>(body as string);
    return req.CreateResponse(HttpStatusCode.OK, e);
}

これにより、JSONエスケープなしのサンプル出力が返されます。

{"Category":"Azure Functions","Action":"Run","Label":"Test"}
5
bmukes