我有一个多行字符串(来自json),例如
"somekey": "somevalue",
"somekey": "somevalue"
"somekey": [somevalue]
"somekey": somenumber
"somekey": null,
我想将字符串拆分成一个数组,其中每个元素的值是somevalue或somenumber的值。 (我实际上是在形成一个数组,其中包含json中出现的每个值的值)这将产生以下元素值:
somevalue
somevalue
somevalue
somenumber
我玩过以下代码的变体和补充:$jsonValues = $jsonValues.Split(": ").Split([Environment]::NewLine)
但想知道实现这一目标的最 Eloquent 方法。
最佳答案
这是一个函数,通常通过 ConvertFrom-Json
使用正确的JSON解析,从JSON文档中提取所有叶子属性值:
# Accepts a JSON string and outputs all leaf property values.
function Get-JsonValue {
param([Parameter(ValueFromPipeline)] $json)
begin {
# Helper function that walks the object graph.
function walk {
param($obj)
# Note: @(...) is used so that scalar $null values aren't ignored.
foreach ($elem in @($obj)) {
if ($elem -isnot [System.Management.Automation.PSCustomObject]) {
$elem # leaf value -> output
}
else {
# recurse
foreach ($prop in $elem.psobject.Properties) {
foreach ($subElem in @($prop.Value)) { walk $subElem }
}
}
}
}
}
process {
walk ($json | ConvertFrom-Json)
}
}
# Sample JSON input
$json = @'
[ { "hi": 11 }, {
"somekey1": "somevalue1",
"somekey2": "somevalue2",
"somekey3": 42,
"somekey4": [
"somevalue4.1",
"somevalue4.2",
4.42
],
"somekey5": null
} ]
'@
# Call with the sample string
$json | Get-JsonValue
以上结果如下:11
somevalue1
somevalue2
42
somevalue4.1
somevalue4.2
4.42
# $null - not visible
关于arrays - Powershell-将字符串拆分为由开始和结束字符串描述的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62680096/