json - Azure 函数和 Powershell : get response in plain JSON

标签 json powershell azure azure-functions

尝试 Azure 中的一些新功能;运行 Powershell 的 Azure Functions。我有一段时间一直在努力解决的一件事是:我无法以纯 JSON 格式获取输出,而是以似乎格式化的方式获取输出,并包含转义字符,并且双引号困惑。

函数.json:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "webHookType": "genericJson",
      "methods": [
        "post",
        "head",
        "trace"
      ]
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

运行.ps1:

$ApiURI="http://avwx.rest/api/metar.php?station=ymml&format=JSON"
$Result = Invoke-RestMethod -Uri $ApiURI
Out-File -Encoding Ascii -FilePath $res -inputObject $Result

产生以下响应:

"\r\n\r\nAltimeter         : 1015\r\nCloud-List        : {FEW 035}\r\nDewpoint          : 11\r\nFlight-Rules      : VFR\r\nOther-List        : {}\r\nRaw-Report        : YMML 210900Z 17010KT 9999 FEW035 19/11 Q1015 NOSIG\r\nRemarks           : NOSIG\r\nRemarks-Info      : \r\nRunway-Vis-List   : {}\r\nStation           : YMML\r\nTemperature       : 19\r\nTime              : 210900Z\r\nUnits             : @{Altimeter=hPa; Altitude=ft; Temperature=C; Visibility=m; \r\n                    Wind-Speed=kt}\r\nVisibility        : 9999\r\nWind-Direction    : 170\r\nWind-Gust         : \r\nWind-Speed        : 10\r\nWind-Variable-Dir : {}\r\n\r\n\r\n\r\n"

但我期望的是这样的:

{
  "Altimeter": "1016", 
  "Cloud-List": [], 
  "Dewpoint": "12", 
  "Flight-Rules": "VFR", 
  "Other-List": [], 
  "Raw-Report": "YMML 210930Z 17011KT CAVOK 18/12 Q1016 NOSIG", 
  "Remarks": "NOSIG", 
  "Remarks-Info": {}, 
  "Runway-Vis-List": [], 
  "Station": "YMML", 
  "Temperature": "18", 
  "Time": "210930Z", 
  "Units": {
    "Altimeter": "hPa", 
    "Altitude": "ft", 
    "Temperature": "C", 
    "Visibility": "m", 
    "Wind-Speed": "kt"
  }, 
  "Visibility": "9999", 
  "Wind-Direction": "170", 
  "Wind-Gust": "", 
  "Wind-Speed": "11", 
  "Wind-Variable-Dir": []
}

这里可能出了什么问题?

最佳答案

我不确定您是如何获得该结果的,因为 Invoke-RestMethod 将数据存储在 ResponseData 属性中。 当您使用 Invoke-RestMethod 时,它会将 json 数据转换为 Powershell 对象。在 run.ps1 中,您似乎要将 PS 对象保存到文件中,而不是 JSON 数据。

如果你不打算修改JSON数据,那么将其转换为PSObject确实没有用。因此您可以使用 Invoke-webrequest 来代替。

但如果你想修改它。

$uri = "http://avwx.rest/api/metar.php?station=ymml&format=JSON"

$request = Invoke-RestMethod -Uri $uri

#Get the result and convert it back to JSON
$Result = $request.responseData | ConvertTo-Json
$Result | Out-File .\data.json -Encoding Ascii

关于json - Azure 函数和 Powershell : get response in plain JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778037/

相关文章:

javascript - 监听发送到 URL 的 JSON 消息

json - 使用命令 sed 更改日志文件日期?

java - 在 postgresql 中使用文本类型列转义双引号并通过 jackson 解析 json

arrays - 如何在powershell中用特定字符替换项目的字符?

azure - 我如何使用cloud-init在azure中的ubuntu VM上加载数据磁盘

Azure网站远程调试与git部署不起作用

c# - Azure ASP .net WebApp 请求超时

javascript - 加载 JSON 作为 HTML 中的资源以避免引导 ajax

arrays - Powershell带数字的排序对象

powershell - 在PowerShell中将字符串转换为目录对象