arrays - Powershell-将字符串拆分为由开始和结束字符串描述的数组

标签 arrays string powershell split

我有一个多行字符串(来自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/

相关文章:

c - 两个数组中两个元素的最小总和,使得索引不相同

php - 使用 PHP 将数组值分配给增量变量以插入到 mysql 表中

javascript - String 是否继承自 Javascript 中的 Object?

Java - 转换字符串中的字符(数组、if-then、 HashMap )的最佳方法?

powershell - 将 MKS 替换为 Powershell

C++ 作业 : Parallel Arrays from text file

c++ - 使用 memcpy 复制二维数组?

string - 字符串 2h 而不是 2h0m0s 的持续时间

xml - 在 Powershell 中将 XML 文档转换为自定义类对象

powershell - 创建Windows Docker容器时出现错误