我不确定如何正确命名这些元素,只是显示它会更容易。我有以下JSON:
import sys
from _winreg import *
# tweak as necessary
version = sys.version[:3]
installpath = sys.prefix
regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (
installpath, installpath, installpath
)
def RegisterPy():
try:
reg = OpenKey(HKEY_CURRENT_USER, regpath)
except EnvironmentError as e:
try:
reg = CreateKey(HKEY_CURRENT_USER, regpath)
SetValue(reg, installkey, REG_SZ, installpath)
SetValue(reg, pythonkey, REG_SZ, pythonpath)
CloseKey(reg)
except:
print ("*** Unable to register!")
return
print ("--- Python", version, "is now registered!")
return
if (QueryValue(reg, installkey) == installpath and
QueryValue(reg, pythonkey) == pythonpath):
CloseKey(reg)
print ("=== Python", version, "is already registered!")
return
CloseKey(reg)
print ("*** Unable to register!")
print ("*** You probably have another Python installation!")
if __name__ == "__main__":
RegisterPy()
我想通过提供电子邮件获得“ DEV”。如何在Powershell中实现它?
答案 0 :(得分:2)
如下所示可以帮助您-
PS> $json = '{
"DEV": [
{
"GitEmail": "asd@asd.com"
}
],
"TEST": [
{
"GitEmail": "asd1@asd.com"
}
],
"PROD": [
{
"GitEmail": "asd2@asd.com"
}
]
}' | ConvertFrom-Json
PS> ($json.psobject.Properties | ? {$_.Value -match "asd@asd.com"}).Name
根据电子邮件的匹配项,您可以检索环境名称。
答案 1 :(得分:1)
我不知道有什么优雅的方法。 ConvertFrom-Json不会像使用convertfrom-xml这样的简单方法来创建整洁的对象来遍历它们,相反,结果只是带有一堆noteproperties的PsObject。
在这种情况下,我要做的是
$a= @"
{
"DEV": [
{
"GitEmail": "asd@asd.com"
}
],
"TEST": [
{
"GitEmail": "asd1@asd.com"
}
],
"PROD": [
{
"GitEmail": "asd2@asd.com"
}
]
}
"@
$JsonObject= ConvertFrom-Json -InputObject $a
$NAMES= $JsonObject|Get-Member |WHERE MemberType -EQ NOTEPROPERTY
$NAMES|Foreach-Object {IF($JsonObject.$($_.NAME).GITEMAIL -EQ 'asd@asd.com'){$_.NAME}}
以上结果为
DEV
不漂亮,不是真正可重用,但可以。 如果有人知道更好的解决方法-我将很高兴学习它:)
答案 2 :(得分:1)
我不能保证有一个更简单的方法,但这是一种方法:
鉴于您的json存储在变量$json
中:
您可以使用$json.psobject.properties.name
获取每个head对象:
输入:
$json.psobject.properties.name
输出:
DEV
TEST
PROD
以此,我们可以创建一个foreach
循环并搜索电子邮件:
foreach ($dev in $json.psobject.properties.name)
{
if($json.$dev.GitEmail -eq "asd@asd.com") {
echo $dev
}
}