gpt4 book ai didi

json - JSON格式,来自文件或变量

转载 作者:行者123 更新时间:2023-12-02 23:08:52 26 4
gpt4 key购买 nike

我有一个PS脚本,该脚本在变量ant中获取JSON,然后将其保存在文件中。

不幸的是,它在一个字符串中获得值,如下所示:

{   "persistentdataapi": "https://somevalue.azurewebsites.net/",   "collectioncountapi": "https://anothervalue.azurewebsites.net/",   "eventserviceapi": "https://thirdvalue.azurewebsites.net/",   "securityserviceapi": "https://fourthvalue.azurewebsites.net/" }

有什么方法可以通过某种(最好是PS)JSON格式来处理此值,以获得这种方式:
{
"persistentdataapi": "https://somevalue.azurewebsites.net/",
"collectioncountapi": "https://anothervalue.azurewebsites.net/",
"eventserviceapi": "https://thirdvalue.azurewebsites.net/",
"securityserviceapi": "https://fourthvalue.azurewebsites.net/",
}

在 Jenkins 获得值(value)的代码:
Import-Module "C:\Program Files\WindowsPowerShell\Modules\Octopus-Cmdlets\0.4.4\Octopus-Cmdlets.psd1"

connect-octoserver http://internal-Octopus.azure.com:8082 API-123456789012345678
$raw = (Get-OctoVariable var.Portal.Web DataAPIJson | Where-Object { $_.Environment -eq "QA" } )

$raw.Value | Out-File "$env:WORKSPACE\portal\var.Portal.Web\dataapi.json"

最佳答案

默认情况下,Powershell漂亮地打印它生成的任何JSON。

因此,进行 pretty-print 的正确方法是将JSON字符串解析为一个对象,然后立即将其转换回JSON字符串。

$json = '{   "persistentdataapi": "https://somevalue.azurewebsites.net/",   "collectioncountapi": "https://anothervalue.azurewebsites.net/",   "eventserviceapi": "https://thirdvalue.azurewebsites.net/",   "securityserviceapi": "https://fourthvalue.azurewebsites.net/" }'

$json | ConvertFrom-Json | ConvertTo-Json

产生
{
"persistentdataapi": "https://somevalue.azurewebsites.net/",
"collectioncountapi": "https://anothervalue.azurewebsites.net/",
"eventserviceapi": "https://thirdvalue.azurewebsites.net/",
"securityserviceapi": "https://fourthvalue.azurewebsites.net/"
}

还是你的情况
$file = "$env:WORKSPACE\portal\var.Portal.Web\dataapi.json"
$raw.Value | ConvertFrom-Json | ConvertTo-Json | Out-File $file -Encoding UTF8

作为副作用,这还可以确保文件中的JSON有效,因为否则 ConvertFrom-Json将引发错误。

读写JSON文件时,请务必明确指定UTF8编码。
$data = Get-Content $file -Encoding UTF8 | ConvertFrom-Json

$data | ConvertTo-Json | Set-Content $file -Encoding UTF8

原因是
  • 根据广泛接受的约定,JSON文件应为UTF8。
  • 除非另有说明,否则Get-ContentSet-Content将使用系统的默认编码来读取/写入文本文件。
  • 系统默认很少使用UTF-8,大多数情况下,它将使用Windows-1252之类的传统单字节编码。
  • 这会带来以下风险:
  • 在读取JSON文件时修改Unicode字符,这些字符在JSON中是合法的。
  • 创建不是UTF-8的JSON文件,使其他人难以使用它们。

  • 实际上,在处理文本文件时,不仅在JSON中,始终要明确指定编码。

    关于json - JSON格式,来自文件或变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50074656/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com