【问题标题】:unable to store json in single line inside azure blob storage using azure function无法使用 azure 函数将 json 存储在 azure blob 存储中的单行中
【发布时间】:2021-06-15 17:31:26
【问题描述】:

我需要将 json 存储在 blob 存储文件中的一行中(没有任何格式)。我将 azure 函数与 Newtonsoft.JSon 属性一起用于某些操作目的,然后写入 blob 。但是当我尝试使用JToken.Parse 时出现异常或内部服务器错误。以下是我正在使用的代码: #r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public static async Task<IActionResult> Run(HttpRequest req,TextWriter outputBlob,ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");
    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    log.LogInformation($"Response is {requestBody}");
    dynamic jObject = JsonConvert.DeserializeObject(requestBody);
    JToken jCategory = jObject;
    var clus = jCategory["clusters"];

    foreach(JObject item in clus)
    {
        var custom_tag=item["custom_tags"];
        var app_logical_name = item.SelectToken("custom_tags.app_name");
        item.SelectToken("init_scripts_safe_mode").Parent.AddAfterSelf(new JProperty("app_logical_name",app_logical_name));
    }              

    var clus2 = JsonConvert.SerializeObject(jCategory,Formatting.None);
    //var clus_new=JArray.Parse(clus).toString(Newtonsoft.Json.Formatting.None);

    outputBlob.Write(clus2);
    // outputBlob.Write(clus_new);

    return new OkObjectResult(requestBody);
}

我已经尝试了这两种方法,但都给出了运行时错误。我只需要将 json 放在一行中(没有任何格式)并写入 blob。你能帮我吗?

【问题讨论】:

    标签: json.net azure-functions


    【解决方案1】:

    这是我这边的结构:

    {
        "clusters":[
            {
                "custom_tags":{
                    "app_name": "appname1"
                },
                "init_scripts_safe_mode":{
                    "xxx": "yyy"
                }
            },
            {
                "custom_tags":{
                    "app_name": "appname2"
                },
                "init_scripts_safe_mode":{
                    "xxx2": "yyy2"
                }
            }
        ],
        "test":"333"
    }
    

    这是我的代码:

    using System;
    using System.IO;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.Http;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.Logging;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    
    namespace FunctionApp3
    {
        public static class Function1
        {
            [FunctionName("Function1")]
            public static async Task<IActionResult> Run(
                [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
                ILogger log)
            {
                log.LogInformation("C# HTTP trigger function processed a request.");
                string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
                log.LogInformation($"Response is {requestBody}");
                dynamic jObject = JsonConvert.DeserializeObject(requestBody);
                JToken jCategory = jObject;
                var clus = jCategory["clusters"];s2 = JsonConvert.SerializeObject(jCategory, Formatting.None);
    
                foreach (JObject item in clus)
                {
                    var custom_tag = item["custom_tags"];
                    var app_logical_name = item.SelectToken("custom_tags.app_name");
                    var xxx = item.SelectToken("init_scripts_safe_mode");
                    xxx.Parent.AddAfterSelf(new JProperty("app_logical_name", app_logical_name));
                    log.LogInformation(JsonConvert.SerializeObject(custom_tag, Formatting.None));
                    log.LogInformation(JsonConvert.SerializeObject(app_logical_name, Formatting.None));
                }
    
                return new OkObjectResult(clus);
            }
        }
    }
    

    好像没问题:

    如果您收到服务器端错误,请查看详细日志以了解错误来自何处。

    500错误无助于解决此问题,需要查看azure函数的具体错误。您可以使用应用程序洞察来获取详细信息错误。该函数必须配置相应的应用洞察才能在门户上查看日志。

    因此,您需要像这样为您的函数应用配置应用洞察:

    然后您的函数应用将重新启动。

    当然,你也可以去kudu查看:

    首先,进入高级工具,然后点击“GO”,

    然后你去kudu之后,点击Debug Console -> CMD -> LogFiles -> Application -> Functions -> yourtriggername。你会在那里找到日志文件。

    如果你是linux操作系统,进入kudu后,点击“日志流”即可(linux的消费计划不支持)。

    【讨论】:

      猜你喜欢
      • 2018-05-07
      • 2019-08-26
      • 2020-04-03
      • 1970-01-01
      • 2019-04-18
      • 2021-10-08
      • 1970-01-01
      • 2017-11-10
      • 2019-09-05
      相关资源
      最近更新 更多