如何使用Powershell解析JSON文件,带条件

如何使用Powershell解析JSON文件,带条件,json,powershell,Json,Powershell,我想使用powershell和json文件。 我有一个JSON文件,它是由Powershell上的调用RestMethod生成的 输出json文件如下所示: [ { "_id": "ID1", "isTemplate": true, "origin": "SPO_Promoteur_DEV", "tenant": "spo", "reference": "HbiuOzq1u", "date":

我想使用powershell和json文件。 我有一个JSON文件,它是由Powershell上的
调用RestMethod
生成的

输出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
设置为true

因此,我将得到X文件,每个文件都有它们的引用作为名称,并且每个文件都有
IsTemplate
参数为TRUE


感谢您的帮助

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

每个项都获得一个文件名
reference_XYZ.json
,其中'XYZ'将是'\u 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
,而忽略其他为false的项,只需向
foreach
循环中添加一个
Where Object
子句,如下所示:

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

如果我理解正确,您可以读入json文件,该文件包含一个项目数组,并将每个项目保存为一个单独的新json文件,如下所示

每个项都获得一个文件名
reference_XYZ.json
,其中'XYZ'将是'\u 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
,而忽略其他为false的项,只需向
foreach
循环中添加一个
Where Object
子句,如下所示:

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

您是否尝试过使用
Convertfrom json
$LoginResponse | ConvertTo json-Depth 10 | Out File-FilePath。\Process.json
我在调用RestMethod之后使用了这个命令。我看不到转换为JSON的目标,以及转换后从JSON转换的目标是什么@Ranadipduttay您已经得到了一个非常符合您需要的答案。您是否尝试过使用
Convertfrom json
$LoginResponse | ConvertTo json-Depth 10 | Out File-FilePath。\Process.json
我在
调用rest方法
一次之后使用了这个命令。我看不到转换为JSON的目标,以及转换后从JSON转换的目标是什么@拉纳迪普杜塔你已经得到了一个答案,这正是你所需要的。我认为这会有很大帮助。我会处理这件事,然后告诉你。谢谢你的回复。@LotPings谢谢你的编辑。我错误地将测试变量名留在了那里。有人能解释一下为什么我们要使用
$\u.isTemplate-eq$true
而不是
$\u.isTemplate-eq“true”
,因为变量$true以前没有在代码中定义过吗?@MouAmg
ConvertFrom Json
cmdlet将Json文件解析为一个对象。(在本例中,实际上是一个对象数组)。无论遇到什么属性,如
“isTemplate”:true
,此属性的值都会自动转换为布尔值。在PowerShell中,您可以编写一个真正的布尔值作为
$true
。转换后,您可以通过检查
isTemplate
属性的类型进行检查,方法如下:
($json[0].isTemplate).gettype()
感谢您的支持。刚刚测试了你的代码,正是我需要的。再次感谢你。解决了。我想这会有很大帮助。我会处理这件事,然后告诉你。谢谢你的回复。@LotPings谢谢你的编辑。我错误地将测试变量名留在了那里。有人能解释一下为什么我们要使用
$\u.isTemplate-eq$true
而不是
$\u.isTemplate-eq“true”
,因为变量$true以前没有在代码中定义过吗?@MouAmg
ConvertFrom Json
cmdlet将Json文件解析为一个对象。(在本例中,实际上是一个对象数组)。无论遇到什么属性,如
“isTemplate”:true
,此属性的值都会自动转换为布尔值。在PowerShell中,您可以编写一个真正的布尔值作为
$true
。转换后,您可以通过检查
isTemplate
属性的类型进行检查,方法如下:
($json[0].isTemplate).gettype()
感谢您的支持。刚刚测试了你的代码,正是我需要的。再次感谢你。解决了的。