JSON 美化器使用 Azure 函数和/PowerShell 和 HTTP 触发器

Posted

技术标签:

【中文标题】JSON 美化器使用 Azure 函数和/PowerShell 和 HTTP 触发器【英文标题】:JSON Prettifier Using Azure Function w/ PowerShell and HTTP Trigger 【发布时间】:2020-01-09 13:55:35 【问题描述】:

以为这会很简单,但可惜我想不通。 It appears that PowerShell will prettify JSON with a single cmdlet.

目标:使用 PowerShell Azure Function 应用美化 JSON

使用 Microsoft Flow,将 HTTP 请求 (POST) 发送到正文中带有“丑陋”的序列化 JSON 文件的 Azure 函数 Azure Function 读取文件(然后使用ConvertToJson cmdlet 美化?)并将文件输出回Flow

问题

    我应该在 Azure Function 的 run.ps1 区域中添加什么来实现这一点? 我应该在 Azure 函数的 functions.json 区域中添加什么来实现这一点?

【问题讨论】:

GET 方法将丢弃请求的主体,从而排除 Get。您可以使用 Post 或 PUT,两者都用于将正文内容发送到 Web 服务器。传统上 PUT 和 PATCH 用于更新语句,而 POST 可用于更新或创建。 谢谢;我将使用 POST。有什么 PowerShell 语法建议可以真正解决这个问题吗? 【参考方案1】:

下面我已经序列化字符串了

' "baz": "quuz", "cow": [ "moo", "cud" ], "foo": "bar" '

Prettify json in powershell 3中提到过

这是我与 HttpPost 一起使用并发送请求的函数:

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters or the body of the request.
$name = $Request.Query.baz
if (-not $name) 
    $name = $Request.Body.baz


if ($name) 
    $status = [HttpStatusCode]::OK
    $body = "Hello $name"

else 
    $status = [HttpStatusCode]::BadRequest
    $body = "Please pass a name on the query string or in the request body."


# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@
    StatusCode = $status
    Body = $body
)

您可以在下面看到,我可以从我发布的字符串中读取它。

您可以使用 ConvertFrom-Json 进行转换,但我想知道您是否需要它,因为您可以通过以下操作访问它:

$name = $Request.Query.baz

我的绑定和你的一样。希望对您有所帮助。

如果您还需要任何帮助,请告诉我。

【讨论】:

请注意,在 OP 中,我将序列化 JSON 文件发布到 Azure 函数而不是字符串。理想情况下,我希望得到一个美化的 JSON 文件作为响应中的输出。这如何改变 PowerShell 代码? 对我来说仍然没有运气。状态 400 错误请求:“请在查询字符串或请求正文中传递名称。”同样,我正在向函数发送 FILE 而不是 JSON 字符串。还有什么想法吗?【参考方案2】:

你在寻找这样的东西吗?

using namespace System.Net

param($Request, $TriggerMetadata)

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@
    StatusCode = [HttpStatusCode]::OK
    Body = $Request.RawBody | ConvertFrom-Json | ConvertTo-Json
)

【讨论】:

以上是关于JSON 美化器使用 Azure 函数和/PowerShell 和 HTTP 触发器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中美化 JSON?

发布 azure 函数并使用 appsettings.json

json 订阅的Azure资源管理器提供程序示例

Microsoft Azure 存储资源管理器 - 如何查询包含 JSON 字符串的列

如何在 Azure Function v2(核心)中静态使用 ConfigurationBuilder?

使用 AutoHotkey 解析、生成和美化/格式化 Json?