簡體   English   中英

使用動態標簽的液體模板轉換 json

[英]Transform json using liquid template for dynamic tags

我必須在邏輯應用程序中使用 Liquid 模板轉換 json。 問題是收到文件時不知道 Json 屬性名稱(例如 DynamicTag1、DynamicTag2)。 標簽名稱可以是在生成文件之前未知的任何名稱。 如何使用 Liquid 轉換此 Json 文件?

這是輸入文件:

{
    "fields": {
        "DynamicTag1": {
            "type": "string",
            "valueString": "SR12345678",
            "text": "SR12345678",
            "page": 1,
            "confidence": 0.995
        },
        "DynamicTag2": {
            "type": "string",
            "valueString": "BR123456",
            "text": "BR123456",
            "page": 1,
            "confidence": 0.995
        },
        "SomeOtherDynamicTag3": {
            "type": "string",
            "valueString": "QR567TY",
            "text": "QR567TY",
            "page": 1,
            "confidence": 0.995
        }
    }
}

這是預期的 output:

{
    "fields": [
        {
            "FieldName": "DynamicTag1",
            "type": "string",
            "valueString": "SR12345678",
            "text": "SR12345678",
            "page": 1,
            "confidence": 0.995
        },
        {
            "FieldName": "DynamicTag2",
            "type": "string",
            "valueString": "BR123456",
            "text": "BR123456",
            "page": 1,
            "confidence": 0.995
        },
        {
            "FieldName": "SomeOtherDynamicTag3",
            "type": "string",
            "valueString": "QR567TY",
            "text": "QR567TY",
            "page": 1,
            "confidence": 0.995
        }
    ]
}

如果您樂於避免使用 Liquid 方法(不是說您應該),那么您可以創建一個 Azure Function 將您的 JSON 轉換為您需要的。

創建一個名為TransformJson的新 function,然后在您的邏輯應用程序中引用它。 這是代碼...

#r "Newtonsoft.Json"

using System;
using System.IO;
using System.Net;
using System.Text;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    string requestBody = String.Empty;
    using (StreamReader streamReader = new StreamReader(req.Body))
    {
        requestBody = await streamReader.ReadToEndAsync();
    }

    var jsonObject = JObject.Parse(requestBody);

    var stringBuilder = new StringBuilder();
    var stringWriter = new StringWriter(stringBuilder);

    using (JsonWriter jsonWriter = new JsonTextWriter(stringWriter))
    {
        jsonWriter.Formatting = Newtonsoft.Json.Formatting.None;

        jsonWriter.WriteStartObject();
        jsonWriter.WritePropertyName("fields");
        jsonWriter.WriteStartArray();

        // Retrieve the first object and process each object below.
        foreach (JObject subObject in jsonObject.First.Children())
        {
            foreach (JProperty dynamicObject in subObject.Children())
            {
                jsonWriter.WriteStartObject();
                jsonWriter.WritePropertyName("fieldName");
                jsonWriter.WriteValue(dynamicObject.Name);

                foreach (JProperty property in dynamicObject.First.Children())
                {
                    jsonWriter.WritePropertyName(property.Name);
                    jsonWriter.WriteValue(property.Value);
                }

                jsonWriter.WriteEndObject();
            }
        }

        jsonWriter.WriteEnd();
        jsonWriter.WriteEndObject();
    }

    return new ContentResult()
    {
        Content = stringBuilder.ToString(),
        ContentType = "application/json"
    };
}

..然后參考它,我得到了想要的結果。

行動

行動

結果

結果

這是一個選擇。

暫無
暫無

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

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