繁体   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