如何在有条件的情况下使用Powershell解析JSON文件

时间:2019-02-18 09:27:09

标签: json powershell

我想使用Powershell和json文件工作。 我有一个从Powershell上的Invoke-RestMethod生成的JSON文件。

输出的json文件如下所示:

[
    {
        "_id": "ID1",
        "isTemplate": true,
        "origin": "SPO_Promoteur_DEV",
        "tenant": "spo",
        "reference": "HbiuOzq1u",
        "date": "2019-02-04T16:01:35.230Z",
        "data":
        {
            "tasks":
            {
                "rows": [
                    {
                        "parentId": "root",
                        "entities": [
                            "Something there"
                        ],
                        "Name": "A name there"
                    },
                    {
                        "parentId": "Z9zgsHzFad",
                        "entities": [
                            "urn:CodeEtape:DONGEN:CodeAction:TEST1"
                        ],
                        "Duration": 0,
                        "index": 0,
                        "Id": "wWotapvig"
                    }
                ]
            }
        }
    },
    {
        "_id": "ID12",
        "isTemplate": true,
        "origin": "SPO_Promoteur_DEV",
        "tenant": "spo",
        "reference": "Hbkjh548u",
        "date": "2019-02-04T16:01:35.230Z",
        "data":
        {
            "tasks":
            {
                "rows": [
                    {
                        "parentId": "root",
                        "entities": [
                            "Something else there"
                        ],
                        "Name": "An other name there"
                    },
                    {
                        "parentId": "Z9zgszffzfHzFad",
                        "entities": [
                            "urn:CodeEtape:DONGEN:CodeAction:TEST1"
                        ],
                        "Duration": 0,
                        "index": 0,
                        "Id": "wWotapvig"
                    }
                ]
            }
        }
    }
]

我想分离这个json文件。 我如何生成名为reference.json的json文件(在json主文件上给出了引用)并以isTemplate为真?

所以我将获得X文件,每个文件都有其引用作为名称,每个文件都具有IsTemplate参数为TRUE。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,则可以读取json文件,该文件包含一个项目数组,并将每个项目另存为单独的新json文件,如下所示。

每个项目的文件名都为reference_XYZ.json,其中“ XYZ”将是“ _id”值。

$inputFile  = 'FULL PATH TO YOUR INPUT JSON FILE'
$outputPath = Split-Path $inputFile -Parent
$json       = Get-Content -Raw -Path $inputFile | ConvertFrom-Json

foreach ($item in $json) {
    $fileName = Join-Path -Path $outputPath -ChildPath ('reference_{0}.json' -f $item._id)
    $item | ConvertTo-Json -Depth 10 | Out-File $fileName
}

我不太确定您对的含义,并且每个参数的IsTemplate参数都设置为TRUE ,因为这两个项目的属性均设置为True。

如果您只想保存具有此"isTemplate": true的项目,而忽略其他错误的项目,则只需在Where-Object循环中添加一个foreach子句,如下所示:

foreach ($item in ($json | Where-Object { $_.isTemplate -eq $true})) {
    ...
}