【问题标题】:unable to update the json file with powershell无法使用 powershell 更新 json 文件
【发布时间】:2018-11-11 17:00:57
【问题描述】:

我正在尝试使用新值更新以下 json 文件并将文件保存在新路径中。但无法获得所需的结果,我在$updatedfilepath 中的新文件将与$jsonfilepath 中的文件相同

我尝试了Set-Content powershell cmd-let,但没有成功。所以请有人可以帮助我指导我的代码哪里出错了。

我的代码:

$JsonData = Get-Content $JsonFilePath -Raw | ConvertFrom-Json
$JsonData | Where { $JsonData.modules.name -eq "qact" } | % { $JsonData.modules.load.local -replace ("qa/styles/act.css", "qa/styles/act.2.css") -replace ("qa/js/act.2.js", "qa/js/act.2.js") }
$JsonData | ConvertTo-Json -Depth 4 |  % { $_ -replace "        ","  " } | Tee-Object $updatedJsonFilePath

我的文件:

{
  "depends": "bento/1.13.0",
  "paths": [
    {
      "patterns": [ "/act/home/?.*" ],
      "use": "qact"
    },
    {
      "patterns": [ "/act/WS/home/?.*" ],
      "use": "qaws"
    }
  ],
  "modules": [
    {
      "name": "qact",
      "earlyLoad": true,
      "load": {
        "local": [  "qa/styles/act.css",
          "qa/js/act.dependencies.js",
          "qa/js/act.wijmo.xlxs.workbook.js",
          "qa/js/act.signalr.js",
          "qa/js/act.js"
        ]
      }
    },
    {
      "name": "qaws",
      "earlyLoad": true,
      "load": {
        "local": [
          "ws/styles/act.css",
          "ws/js/act.dependencies.js",
          "ws/js/act.wijmo.xlxs.workbook.js",
          "ws/js/act.signalr.js",
          "ws/js/act.js"
        ]
      }
    }
  ]
}

我的上述代码输出:

qa/styles/oct.2.css
qa/js/oct.dependencies.js
qa/js/oct.wijmo.xlxs.workbook.js
qa/js/oct.signalr.js
qa/js/oct.2.js
{
  "depends": "bento/1.13.0",
  "paths": [
    {
      "patterns": [ "/act/home/?.*" ],
      "use": "qact"
    },
    {
      "patterns": [ "/act/WS/home/?.*" ],
      "use": "qaws"
    }
  ],
  "modules": [
    {
      "name": "qact",
      "earlyLoad": true,
      "load": {
        "local": [  "qa/styles/act.css",
          "qa/js/act.dependencies.js",
          "qa/js/act.wijmo.xlxs.workbook.js",
          "qa/js/act.signalr.js",
          "qa/js/act.js"
        ]
      }
    },
    {
      "name": "qaws",
      "earlyLoad": true,
      "load": {
        "local": [
          "ws/styles/act.css",
          "ws/js/act.dependencies.js",
          "ws/js/act.wijmo.xlxs.workbook.js",
          "ws/js/act.signalr.js",
          "ws/js/act.js"
        ]
      }
    }
  ]
}

我想要的结果:

{
  "depends": "bento/1.13.0",
  "paths": [
    {
      "patterns": [ "/act/home/?.*" ],
      "use": "qact"
    },
    {
      "patterns": [ "/act/WS/home/?.*" ],
      "use": "qaws"
    }
  ],
  "modules": [
    {
      "name": "qact",
      "earlyLoad": true,
      "load": {
        "local": [  "qa/styles/act.2.css",
          "qa/js/act.dependencies.js",
          "qa/js/act.wijmo.xlxs.workbook.js",
          "qa/js/act.signalr.js",
          "qa/js/act.2.js"
        ]
      }
    },
    {
      "name": "qaws",
      "earlyLoad": true,
      "load": {
        "local": [
          "ws/styles/act.css",
          "ws/js/act.dependencies.js",
          "ws/js/act.wijmo.xlxs.workbook.js",
          "ws/js/act.signalr.js",
          "ws/js/act.js"
        ]
      }
    }
  ]
}

【问题讨论】:

    标签: json windows powershell scripting


    【解决方案1】:

    我认为通过简单的字符串替换就可以了...

    $jsonFilePath = "c:\folder\input.json"         #replace with path to your input file
    $updatedJsonFilePath = "c:\folder\output.json" #replace with path to your output file
    
    $jsonData = Get-Content $jsonFilePath 
    $jsonData -ireplace ("styles/act.css", "styles/act.2.css") -ireplace ("js/act.js", "js/act.2.js") | Out-File $updatedJsonFilePath
    

    【讨论】:

    • 感谢您的快速解决方案。
    猜你喜欢
    • 2016-09-29
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2019-09-12
    • 1970-01-01
    • 2020-10-16
    • 2015-02-19
    相关资源
    最近更新 更多