代码之家  ›  专栏  ›  技术社区  ›  Dmitrij Kultasev

通过json中的数组元素名获取值

  •  0
  • Dmitrij Kultasev  · 技术社区  · 6 年前

    我不知道如何正确地命名这些元素,只显示它会更容易。我有以下JSON:

    {
      "DEV": [
        {
          "GitEmail": "asd@asd.com"
        }
      ],
      "TEST": [
        {
          "GitEmail": "asd1@asd.com"
        }
      ],
      "PROD": [
        {
          "GitEmail": "asd2@asd.com"
        }
      ]
    }  
    

    我想通过提供电子邮件获得“dev”。如何在PowerShell中实现?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Vivek Kumar Singh    6 年前

    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
    

        2
  •  1
  •   Paxz Quiron    6 年前

    $json

    $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
      }
    }
    
        3
  •  1
  •   Tomek    6 年前


        $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