skip to Main Content

I am having problems getting assembling this Json in Powershell

{
  "totalCount": 1,
  "list": [
    {
      "type": "ToggleLightingState",
      "order": 1,
      "delay": null,
      "postDelay": null,
      "name": "Toggle lighting state of light L-17E-611-KB-1",
      "parameters": {
        "relayIds": [],
        "curveType": null,
        "behavior": null,
        "duration": null,
        "useAssignedSpace": false,
        "spaceIds": [],
        "lightIds": [
          2408
        ],
        "spaceGroupIds": []
      }
    }
  ]
}

I am Iterating through an array using a for loop to fill in the values. I am just struggling to generate a list inside a list in JSON

    
    $ActionList = @{
        
    
    @(
         @{
         type = 'ToggleLightingState'
         order = 1
         delay = 'null'
         postDelay = 'null'
         name = $actionSets[$i][0]
      }
     ) 
  }    
  ConvertTo-Json -InputObject $ActionList      

2

Answers


  1. You don’t have the name of the array "list" inside the object. It looks like you can’t have an unnamed array inside an object. I don’t know what $actionsets is, so I took off the indexes. Plus fixing your syntax errors results in the below. Note that ‘null’ and $null are different things.

    $ActionList = @{
      list = @(
        @{
          type = 'ToggleLightingState'
          order = 1
          delay = 'null'
          postDelay = 'null'
          name = $actionSets
        }
      )
    }
    ConvertTo-Json -InputObject $ActionList
    
    
    {
        "list":  [
                     {
                         "delay":  "null",
                         "name":  null,
                         "postDelay":  "null",
                         "type":  "ToggleLightingState",
                         "order":  1
                     }
                 ]
    }
    
    Login or Signup to reply.
  2. Using this ConvertTo-Expression cmdlet:

    $Json = @'
    {
      "totalCount": 1,
      "list": [
        {
          "type": "ToggleLightingState",
          "order": 1,
          "delay": null,
          "postDelay": null,
          "name": "Toggle lighting state of light L-17E-611-KB-1",
          "parameters": {
            "relayIds": [],
            "curveType": null,
            "behavior": null,
            "duration": null,
            "useAssignedSpace": false,
            "spaceIds": [],
            "lightIds": [
              2408
            ],
            "spaceGroupIds": []
          }
        }
      ]
    }
    '@
    $Json | ConvertFrom-Json |ConvertTo-Expression
    
    [pscustomobject]@{
        totalCount = 1
        list = ,[pscustomobject]@{
            type = 'ToggleLightingState'
            order = 1
            delay = $Null
            postDelay = $Null
            name = 'Toggle lighting state of light L-17E-611-KB-1'
            parameters = [pscustomobject]@{
                relayIds = @()
                curveType = $Null
                behavior = $Null
                duration = $Null
                useAssignedSpace = $False
                spaceIds = @()
                lightIds = ,2408
                spaceGroupIds = @()
            }
        }
    }
    

    Or as hashtable:

    $Json |ConvertFrom-Json -AsHashTable |ConvertTo-Expression
    @{
        totalCount = 1
        list = ,@{
            postDelay = $Null
            parameters = @{
                duration = $Null
                spaceGroupIds = @()
                relayIds = @()
                spaceIds = @()
                useAssignedSpace = $False
                curveType = $Null
                behavior = $Null
                lightIds = ,2408
            }
            type = 'ToggleLightingState'
            delay = $Null
            order = 1
            name = 'Toggle lighting state of light L-17E-611-KB-1'
        }
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search