【问题标题】:How to add an object in array on parsed JSON?如何在解析的 JSON 的数组中添加对象?
【发布时间】:2018-02-03 13:29:04
【问题描述】:

我有这个文件 .json:

{
  "topologyTypes": {
    "stations": {
      "instances": [
        {
          "@name": "value1",
          "@address": "value2"
        },
        {
          "@name": "value3",
          "@address": "value4"
        }         
      ]
    }
  },
  "agg": {},
  "inter": {}
}

我想用 PowerShell 在 topologyType.stations.instances 中添加一个这样的对象

{
    "@name": "value4",
    "@adress": "value5"
}

所以我在 PowerShell 中尝试了以下代码,但它不起作用:

$path = "./data.json"
$jsonFile = Get-Content $path -Raw | ConvertFrom-Json

$jsonContent = @"
    {
        "@name": "value4",
        "@adress": "value5"
    }
"@

$jsonFile.topologyTypes.stations.instances |
    Add-Content -Value (ConvertFrom-Json $jsonContent)

我想要得到的输出是这样的:

{
  "topologyTypes": {
    "stations": {
      "instances": [
        {
          "@name": "value1",
          "@address": "value2"
        },
        {
          "@name": "value3",
          "@address": "value4"
        },
        {
          "@name": "value4",
          "@address": "value5"
        }         
      ]
    }
  },
  "agg": {},
  "inter": {}
}

【问题讨论】:

  • “它不起作用”是一个不充分的问题描述。它究竟如何“不起作用”?你有错误吗?预期和实际结果是什么?乍一看,我可以发现至少一个 PowerShell 和一个 JSON 语法错误。
  • 您好,感谢您的回复。我收到此错误:ConvertFrom-Json:无效的 json 原语:[。 (system.argunment.exception) + ... ations.instances | Add-Content -Value (ConvertFrom-Json $jsonContent) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [ConvertFrom-Json],ArgumentException + FullyQualifiedErrorId:System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand
  • 因为$jsonContent 中的尾随逗号使 JSON 字符串无效。但即使您删除它,也无法通过附加到文件的方式将新数据插入到 JSON 结构中。即使您发布的原始 JSON 字符串也是无效的。请edit您的问题显示您的代码、输入、所需输出以及代码给您的错误的minimal reproducible example
  • 好的,所以我修改了我的第一篇文章,抱歉。我不擅长 json 文件的语法
  • 也许只是在解析之前将[替换为[ + $jsonContent

标签: arrays json powershell object add


【解决方案1】:

将新内容定义为 PowerShell 自定义对象:

$jsonContent = [PSCustomObject]@{
    '@name'   = 'value4'
    '@adress' = 'value5'
}

将其附加到您导入的 JSON 数据的 instances 子结构中:

$jsonFile.topologyTypes.stations.instances += $jsonContent

然后将数据转换回 JSON 字符串:

$jsonFile | ConvertTo-Json -Depth 4

注意ConvertTo-Json 插入了大量的意图空间。如果你想要你发布的格式,你需要自己做一些漂亮的打印。 this 之类的东西可能会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2019-01-14
    • 2011-08-04
    相关资源
    最近更新 更多