I have parsed the content of an API call to a variable $a.(Content below) and I would like to only parse out the list of packages which are under "dependencies". Is there are way to filter for only the dependencies using powershell?.
{
"name": "1package",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@babel/runtime": {
"version": "7",
"resolved": "https://registry.npmjs.org",
"integrity": "***",
"requires": {
"regenerator-runtime": "^0.13.4"
}
},
"@cloud": {
"version": "2",
"resolved": "https://registry.npmjs.org/",
"integrity": "***"
},
"@cloudnative/health-connect": {
"version": "2",
"resolved": "https://registry.npmjs.org/@***.tgz",
"integrity": "***",
"requires": {
"@cloudnative/health": "^2.1.1"
}
},
So I just want to parse out a list having
babel/runtime version 7
cloud version 2
cloudnative/health-connect version 2
By accessing the PSObject.Properties
of each object we can get the dependency "Name" and the desired values of the properties "Version" and "Resolved". Using a calculated property with Select-Object
we can construct a new object.
Note, this code assumes you have already used ConvertFrom-Json
over your Json string and, the object is stored in the $json
variable.
$json.dependencies.PSObject.Properties | Select-Object Name,
@{
Name = 'Version'
Expression = { $_.Value.Version }
}, @{
Name = 'Resolved'
Expression = { $_.Value.Resolved }
}
Output
Name Version Resolved
---- ------- --------
@babel/runtime 7 https://registry.npmjs.org
@cloud 2 https://registry.npmjs.org/
@cloudnative/health-connect 2 https://registry.npmjs.org/@***.tgz