如何获取此 JSON 中的路径值?

huangapple go评论59阅读模式
英文:

How can I get the Path value in this Json?

问题

{
"vaults": {
"43371adf": {
"path": "C:\Users\user23\Documents\Mango Vault",
"ts": 16767
},
"54a80cfadc691ec4": {
"path": "C:\Users\user23\Documents\Apple Vault",
"ts": 166576
},
"af524734": {
"path": "C:\Users\user23\Documents\Orange Vault",
"ts": 166985
},
"40290aab5": {
"path": "C:\Users\user23\Documents\Banana Vault",
"ts": 167293,
"open": true
}
},
"frame": "hidden"
}


<details>
<summary>英文:</summary>

I have a Json which is similar to this sample here

{
"vaults": {
"43371adf": {
"path": "C:\Users\user23\Documents\Mango Vault",
"ts": 16767
},
"54a80cfadc691ec4": {
"path": "C:\Users\user23\Documents\Apple Vault",
"ts": 166576
},
"af524734": {
"path": "C:\Users\user23\Documents\Orange Vault",
"ts": 166985
},
"40290aab5": {
"path": "C:\Users\user23\Documents\Banana Vault",
"ts": 167293,
"open": true
}
},
"frame": "hidden"
}


I am interested in retrieving the values for the keys `Path`. Some things I tried are:

$vaultsIndex = Get-Content -Path "C:\Temp\sample.json" | ConvertFrom-Json
$vaultsIndex.vaults
$vaultsIndex.vaults | foreach {$_.where -eq 'path'} #Returns 'False'
$vaultsIndex.vaults.where -eq 'path' #Also Returns 'False'

The only thing that works is `$vaultsIndex.vaults.43371adf` which I cant automate at all, I really need to just be all to get all the paths in a generic way.

The searches I performed just pointed me to this `$_.where()` method. Any help would be greatly appreciated!

</details>


# 答案1
**得分**: 4

你可以通过调用[`.PSObject.Properties`](https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.psobject.properties?view=powershellsdk-7.2.0)来访问对象的属性。由于你只对`vault`中每个对象的`path`感兴趣,我们可以调用属性集的[`.Value`属性](https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.psmemberinfo.value?view=powershellsdk-7.2.0#system-management-automation-psmemberinfo-value)来访问它们,然后调用每个对象上的`.path`来获取值。这是通过[成员访问枚举](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_member-access_enumeration?view=powershell-7.2)来完成的:

```powershell
$json.vaults.PSObject.Properties.Value.path
英文:

You can access an object's Properties by calling .PSObject.Properties over said object. Since you're interested only in the path of each object in vault, we can call the .Value property of the property collection to access them and from there call .path over each object to get the values. This is done via member-access enumeration:

$json.vaults.PSObject.Properties.Value.path

huangapple
  • 本文由 发表于 2023年2月19日 07:26:22
  • 转载请务必保留本文链接:https://go.coder-hub.com/75497027.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定