在Powershell中将JSON数组对象转换为字符串

3
我正在处理一个类似于以下的JSON格式:
[
    {
        "Ack":  "no",
        "Rule":  "dont",
        "Tags":  [
                     "server"
                 ],
        "Type":  "blue"
    },

    {
        "Ack":  "no1",
        "Rule":  "knock",
        "Tags":  [
                     "yellow",
                     "green"
                 ],
        "Type":  "multiplecolour"
    }

]

我需要将Tags数组转换为逗号分隔的字符串,并在JSON文件中用转换后的字符串替换该数组。我尝试过从JSON进行转换,但是我无法以简洁的方式将数组转换为字符串,因为我还在学习PS,请多多包涵。
1个回答

6

ConvertFrom-Json 可能适合您。以下是将您的 JSON 字符串转换为 PowerShell 对象数组并使用逗号分隔符联接每个对象的标记的示例:

$json = @"
[
    {
        "Ack":  "no",
        "Rule":  "dont",
        "Tags":  [
                     "server"
                 ],
        "Type":  "blue"
    },
    {
        "Ack":  "no1",
        "Rule":  "knock",
        "Tags":  [
                     "yellow",
                     "green"
                 ],
        "Type":  "multiplecolour"
    }
]
"@

(ConvertFrom-Json -InputObject $json) `
    | ForEach-Object { $_.Tags = ($_.Tags -join ","); $_ } `
    | ConvertTo-Json `
    | Out-File -FilePath new.json

编辑:注意(正如@mklement0指出的那样),括号ConvertFrom-Json是必需的,以强制枚举结果作为对象数组传递到管道

4
不错,不过值得指出的是 (...) 是必需的,因为它强制对通过管道发送的 作为整体的 ConvertFrom-Json 数组进行枚举 - mklement0
1
@mri.o:请在未来提前说明所有要求-从您当前陈述的问题中并不清楚。也许Glenn愿意更新他的答案,但简而言之,您必须使用$_.Tags = $_.Tags -join ",",然后将其管道传输到ConvertTo-Json - mklement0
1
$jsonParameters = (ConvertFrom-Json -InputObject $content) $jsonParameters | ForEach-Object { $_.Tags -join "," } | ConvertTo-Json | out-file new.json - 这是我使用管道的方式,new.json文件中只包含标签字符串。@Glenn。它无法正确创建文件。 - mr i.o
@mri.o 所以,您的意图是复制JSON,唯一的区别是“Tags”不再是一个数组,而是一个字符串属性,其中包含一个或多个逗号分隔的值?例如,对于第二个数组元素,它变成了这样? "Tags": "yellow,green" - Glenn
如果是这样,答案的最新更新应该对您起作用。 - Glenn
1
今天学到了新东西,谢谢@Glenn,最新的更新很好用! - mr i.o

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接