簡體   English   中英

如何使用 Azure 數據工廠展平嵌套的 JSON 結構

[英]How to flatten a nested JSON structure using Azure Data Factory

我想用嵌套數組對象展平我的 JSON。

例如,我當前來自 Cosmos DB 的 JSON 是:

[
    {
        "id": "",
        "name": "",
        "type": "",
        "Data": [
            {
                "id": "",
                "name": "aaa",
                "value": "100"
            },
            {
                "id": "",
                "name": "bbb",
                "value": "200"
            }
        ]
    }
]

我想將其轉換為:

[
    {
        "id": "",
        "name": "",
        "type": "",
        "aaa": "100",
        "bbb": "200"
    }
]

基本上,我想在根結構中使用“Data.name”的值作為,使用“Data.value”作為

大家好,我是 Microsoft for Founders Hub 團隊的 Wayne Wang!

我使用帶有 System.Text.Json 6.0.4 包的 .net 5 函數應用程序編寫了這個腳本

using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text.Json.Nodes;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;

namespace FunctionApp2
{
    public static class Function1
    {
        [Function("Function1")]
        public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
            FunctionContext executionContext)
        {
            var logger = executionContext.GetLogger("Function1");
            logger.LogInformation("C# HTTP trigger function processed a request.");




            var stringInput = @"[
    {
        ""id"": """",
        ""name"": """",
        ""type"": """",
        ""Data"": [
            {
                ""id"": """",
                ""name"": ""aaa"",
                ""value"": ""100""
            },
            {
                ""id"": """",
                ""name"": ""bbb"",
                ""value"": ""200""
            }
        ]
    }
]"; //or you can get it from post;

            var jr = JsonNode.Parse(stringInput);
            var jcol = jr.AsArray().Select(arrayItem =>
            {
                var obj = arrayItem.AsObject();
                var rval = new JsonObject();
                CopyValue(obj, rval, "id");
                CopyValue(obj, rval, "name");
                CopyValue(obj, rval, "type");
                if (obj.TryGetPropertyValue("Data", out var pnode))
                {
                    var dataArray = pnode.AsArray();
                    foreach (var itemDataObject in dataArray.Select(x => x.AsObject()))
                    {
                        if (itemDataObject.TryGetPropertyValue("name", out var namep))
                        {
                            if (itemDataObject.TryGetPropertyValue("value", out var valuep))
                            {
                                rval.Add(namep.GetValue<string>(), valuep.GetValue<string>());
                            }
                        }

                    }

                }
                return rval;
            });
            var newjr = new JsonArray(jcol.ToArray());


            var response = req.CreateResponse(HttpStatusCode.OK);
            response.Headers.Add("Content-Type", "text/plain; charset=utf-8");

            response.WriteString(newjr.ToJsonString());

            return response;
        }

    
        private static void CopyValue(JsonObject from, JsonObject to, string propName)
        {
            if (from.TryGetPropertyValue(propName, out var pnode))
            {
                to.Add(propName, pnode.GetValue<string>());
            }
        }
    }
}



您可以使用解析 JSON 並在邏輯應用中編寫連接器來實​​現此目的。 在下面復制之后是對我有用的邏輯應用程序。

在此處輸入圖像描述

我已經初始化變量以檢索Data.nameData.Value

在此處輸入圖像描述

在上述步驟中,我試圖檢索 JSON 文件中存在的所有Data.nameData.value值。

在此處輸入圖像描述

然后我終於使用 compose 連接器構建了整個扁平化的 JSON。

結果

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM