繁体   English   中英

将原始 JSON 写入 CosmosDB 和一个 Azure Function

[英]Writing raw JSON to CosmosDB and an Azure Function

我想从 HTTP 帖子中获取原始 JSON 正文并将其直接写入我的 CosmosDB。

假设数据如下所示:

{
  "id": "123456",
  "storeName": "City Bar and Grille",
  "invoiceTotal": 65
}

但是,documentsOut.AddAsync 命令使用如下格式:

wait documentsOut.AddAsync(new
  {
    // create a random ID
    id = System.Guid.NewGuid().ToString(),
    body = sourceJson
  });

然后我得到一个如下所示的文档:

{
  "id": "0e99d3ab-1956-4c0a-8ec1-99de5c987555",
  "body": {
    "id": "123456",
    "storeName": "City Bar and Grille",
    "invoiceTotal": 65
  }
}

我真正想要的是这样结束:

{
  "id": "123456",
  "storeName": "City Bar and Grille",
  "invoiceTotal": 65
}

我想完全删除 id = System.Guid.NewGuid().ToString() (这应该不难)。

如何传递原始 JSON 而无需将其添加到某些父节点(例如正文)?

使用您在问题中分享的类似示例。 我们可以创建一个 Model class 具有要存储在数据库中的属性。

在此处输入图像描述

public class StoreDetails : TableEntity
{
    [JsonProperty("id")]
    public string Id { get; set; } 
    [JsonProperty("storeName")]
    public string StoreName { get; set; }
    [JsonProperty("invoiceTotal")]
    public string InvoiceTotal { get; set; }
}

然后可以创建 model 的 object 并将该 object 传递给AddAsync()方法。 如下截图所示。

在此处输入图像描述

        var item = new StoreDetails
        {
            Id = Guid.NewGuid().ToString(),
            StoreName = data.StoreName,
            InvoiceTotal = data.InvoiceTotal
        };
        await storeDetailOut.AddAsync(item);

当我们触发 post API 时,得到如下所示的响应。

在此处输入图像描述

最后我们可以看到相同的记录存储在 CosmosDB 中。

在此处输入图像描述

只是为了将我的评论形式化为一个答案:你专门创建了你正在创建的 Cosmos DB 文档的body属性:

wait documentsOut.AddAsync(new
  {
    // create a random ID
    id = System.Guid.NewGuid().ToString(),
    body = sourceJson
  });

同时,您忽略了传入的 ID。 由于您想保留该 ID,您可以复制该 ID(只要它在分区中保持唯一)而不是生成新的 GUID,并且还可以从sourceJson获取各个属性以避免嵌套的body元素:

wait documentsOut.AddAsync(new
  {
    id = sourceJson.id,
    storeName = sourceJson.storeName,
    invoiceTotal = sourceJson.invoiceTotal
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM