【问题标题】:JSON output using powershell in ForEach loop在 ForEach 循环中使用 powershell 输出 JSON
【发布时间】:2020-03-03 02:56:57
【问题描述】:

朋友们! 开始使用powershell,遇到了问题。 我需要在循环中以 JSON 格式字符串输出一些变量的值。 为此,我使用以下代码:

.....
    foreach ($value in $memoryLast5min)
    {
        $valueInt = [convert]::ToInt32($value, 10);   
        if ($valueInt -ge $500MB)
        {
            $index = [array]::IndexOf($memoryLast5min, $value);        
            $JSON += @{'problemUsers' = @(
                   @{
                        "userName"       = $userNames[$index]
                        "memoryLast5min" = $value
                        "readLast5min"   = $readLast5min[$index]
                        "writeLast5min"  = $writeLast5min[$index]
                    } 
                ) 
            } | ConvertTo-JSON;
        }
    }
.....
return $JSON

在变量 $JSON 中我得到以下结果:

{
    "problemUsers":  [
                         {
                             "userName":  "User1",
                             "writeLast5min":  29,
                             "memoryLast5min":  181,
                             "readLast5min":  25
                         }
                     ]
}{
    "problemUsers":  [
                         {
                             "userName":  "User2",
                             "writeLast5min":  80,
                             "memoryLast5min":  396,
                             "readLast5min":  74
                         }
                     ]
}{
    "problemUsers":  [
                         {
                             "userName":  "User3",
                             "writeLast5min":  32,
                             "memoryLast5min":  169,
                             "readLast5min":  29
                         }
                     ]
}

但我需要这个结果:

{
    "problemUsers":  [
                         {
                             "userName":  "User1",
                             "writeLast5min":  29,
                             "memoryLast5min":  181,
                             "readLast5min":  25
                         },
                         {
                             "userName":  "User2",
                             "writeLast5min":  80,
                             "memoryLast5min":  396,
                             "readLast5min":  74
                         },
                         {
                             "userName":  "User3",
                             "writeLast5min":  32,
                             "memoryLast5min":  169,
                             "readLast5min":  29
                         }
                     ]
}

请帮我修改代码

【问题讨论】:

  • 我会尝试从您的 $json 语句中删除 @{'problemUsers' = 并从您的循环中删除 json 转换。然后在循环之外做@{'problemUsers' = $json} | convertto-Json
  • @nzrytmn,我的 JSON 文件应该与我的问题的第三个代码块中的相同
  • @AdminOfThings 谢谢!有用!在循环之外做$JSON = @{'problemUsers' = $JSON} | convertto-Json

标签: json powershell foreach


【解决方案1】:

构建数据结构。 完成后,转换为 JSON。

$data = [pscustomobject]@{
    problemUsers = @()
}

foreach ($value in $memoryLast5min)
{
    $valueInt = [convert]::ToInt32($value, 10);   
    if ($valueInt -ge $500MB)
    {
        $index = [array]::IndexOf($memoryLast5min, $value) 
        $data.problemUsers += @{
            userName       = $userNames[$index]
            memoryLast5min = $value
            readLast5min   = $readLast5min[$index]
            writeLast5min  = $writeLast5min[$index]
        }
    } 
}

$json = $data | ConvertTo-Json

【讨论】:

  • 我认为您也需要从循环内的哈希表创建自定义对象,$data.problemUsers = @(foreach (...) {...}) 将避免在循环中附加到数组。
  • 自定义对象和哈希表应该是一样的,我错过了什么吗?
  • 不,你是对的。我以为你需要对象,但我刚刚检查了一下,显然哈希表的工作原理是一样的。
  • 我同意,$data.problemUsers = @(foreach (...) {...}) 更适合单个作业,但话又说回来,OP 可能有更多这样的部分,根据不同的标准添加问题用户,我不想排除任何事情在这里。
猜你喜欢
  • 2018-07-19
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
相关资源
最近更新 更多