Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JSON导入SQL_Json_Azure_Azure Functions - Fatal编程技术网

将JSON导入SQL

将JSON导入SQL,json,azure,azure-functions,Json,Azure,Azure Functions,我正在通过Azure函数将webhook导入SQL数据库 当我使用 { "remote_address": "1234", } { "transaction": { "remote_address": "1234", } } 这很有效 但是当我使用 { "remote_address": "1234", } { "transaction": { "remote_addre

我正在通过Azure函数将webhook导入SQL数据库

当我使用

{
        "remote_address": "1234",
}
{
        "transaction": {
            "remote_address": "1234",
    }
}
这很有效

但是当我使用

{
        "remote_address": "1234",
}
{
        "transaction": {
            "remote_address": "1234",
    }
}
它不起作用

我拥有的Azure功能代码是:

using System.Net;
using Dapper;
using System.Data.SqlClient;
using System.Configuration;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}");

var successful =true;
try
{
    var cnnString  = ConfigurationManager.ConnectionStrings["sqlConnection"].ConnectionString;

    using(var connection = new SqlConnection(cnnString))
    {
        connection.Open();

        var rLog = await req.Content.ReadAsAsync<LogRequest>();

        // insert a log to the database
        connection.Execute("INSERT INTO [dbo].[TABLE] ([COLUMN]) VALUES (@remote_address)", rLog);
        log.Info("Log added to database successfully!");
    }
}
catch
{
    successful=false;
}

return !successful
    ? req.CreateResponse(HttpStatusCode.BadRequest, "Unable to process your request!")
    : req.CreateResponse(HttpStatusCode.OK, "Data saved successfully!");
}

public class LogRequest
{
    public int Id{get;set;}
    public string remote_address{get;set;}
}
使用System.Net;
使用整洁;
使用System.Data.SqlClient;
使用系统配置;
公共静态异步任务运行(HttpRequestMessage请求、TraceWriter日志)
{
log.Info($“C#HTTP触发器函数处理了一个请求。RequestUri={req.RequestUri}”);
var成功=真;
尝试
{
var cnnString=ConfigurationManager.ConnectionString[“sqlConnection”].ConnectionString;
使用(var连接=新的SqlConnection(cnnString))
{
connection.Open();
var rLog=await req.Content.ReadAsAsync();
//将日志插入数据库
执行(“插入到[dbo].[TABLE]([COLUMN])值(@remote_address)”,rLog);
log.Info(“日志已成功添加到数据库!”);
}
}
抓住
{
成功=错误;
}
回来!成功
?req.CreateResponse(HttpStatusCode.BadRequest,“无法处理您的请求!”)
:req.CreateResponse(HttpStatusCode.OK,“数据保存成功!”);
}
公共类日志请求
{
公共int Id{get;set;}
公共字符串远程地址{get;set;}
}

如何获取嵌套的JSON对象?

基本上,您可以嵌套您的C#类,以便它们对应于JSON结构:

public class Transaction
{
    public string remote_address { get; set; }
}

public class LogRequest
{
    public Transaction transaction { get; set; }
}

基本上,您可以嵌套您的C#类,以便它们对应于JSON结构:

public class Transaction
{
    public string remote_address { get; set; }
}

public class LogRequest
{
    public Transaction transaction { get; set; }
}

要详细介绍Mikhail的好答案,根据您的需求,有时最容易使用
JObject/dynamic

var jobjectBody = await req.Content.ReadAsAsync<JObject>();
dynamic dynamicBody = jobjectBody;
string remote_address = dynamicBody.transaction.remote_address;
var jobjectBody=wait req.Content.ReadAsAsync();
动态dynamicBody=jobjectBody;
字符串remote\u address=dynamicBody.transaction.remote\u address;

要详细介绍Mikhail的好答案,根据您的需求,它有时最容易使用
JObject/dynamic

var jobjectBody = await req.Content.ReadAsAsync<JObject>();
dynamic dynamicBody = jobjectBody;
string remote_address = dynamicBody.transaction.remote_address;
var jobjectBody=wait req.Content.ReadAsAsync();
动态dynamicBody=jobjectBody;
字符串remote\u address=dynamicBody.transaction.remote\u address;

对于此选项,如何使其与连接字符串一起工作?类似于:
connection.Execute(“插入[dbo].[TABLE]([COLUMN])值(@remote_address)”,jobjectBody)
只需将
remote\u address
传递到
Execute()?类似于:
connection.Execute(“插入[dbo].[TABLE]([COLUMN])值(@remote_address)”,jobjectBody)只需将
远程地址
传递到
Execute()