2

Currently, I'm attempting to call upon an API to run a POST, with JSON data as the body. So I was wondering if anyone would be able to tell me how I need to format the text below inside the variable $postParams. I'm pretty new at working with JSON so I'm having so trouble with this.

Currently, I only have the following and don't know what to do about the second line on.

$postParams = @{name='Example'}

Here's is the entire data I was hoping to add to $postParams. So if you could help me with the 2nd, 4th, and 8th that'd be awesome. Thanks!

{
    "name":"Example",
    "template":{"name":"Template"},
    "url":"http://localhost",
    "page":{"name":"Landing Page"},
    "smtp":{"name":"Sending Profile"},
    "launch_date":"2019-10-08T17:20:00+00:00",
    "send_by_date":null,
    "groups":[{"name":"test group"}]
}

3 Answers 3

4

You'll need a here-string and ConvertFrom-Json.

here-string:

Quotation marks are also used to create a here-string. A here-string is a single-quoted or double-quoted string in which quotation marks are interpreted literally. A here-string can span multiple lines. All the lines in a here-string are interpreted as strings, even though they are not enclosed in quotation marks.

The resulting code:

# Use a PowerShell here string to take JSON as it is
$jsonString = @"
{
    "name":"Example",
    "template":{"name":"Template"},
    "url":"http://localhost",
    "page":{"name":"Landing Page"},
    "smtp":{"name":"Sending Profile"},
    "launch_date":"2019-10-08T17:20:00+00:00",
    "send_by_date":null,
    "groups":[{"name":"test group"}]
}
"@

# Pipe the string to create a new JSON object
$jsonObject = $jsonString | ConvertFrom-Json

# The resulting JSON object has properties matching the properties in the orig. JSON
$jsonObject.name
$jsonObject.url

# Nested property
$jsonObject.template.name

# Nested property in array
$jsonObject.groups[0].name

I've posted an online version of the above code at tio.run, so you can play around with it.

If you want to update several properties of the $jsonObject you can do the following:

 $jsonObject.name = "NEW NAME"
 $jsonObject.url = "NEW URL"

 $jsonObject | ConvertTo-Json

ConvertTo-Json will take your object and create an appropriate JSON string:

{
  "name": "NEW NAME",
  "template": {
    "name": "Template"
  },
  "url": "NEW URL",
  "page": {
    "name": "Landing Page"
  },
  "smtp": {
    "name": "Sending Profile"
  },
  "launch_date": "2019-10-08T17:20:00+00:00",
  "send_by_date": null,
  "groups": [
    {
      "name": "test group"
    }
  ]
}

If you $jsonObject has more than two levels of depth, use the -Depth parameter, otherwise not all object information will be included in the JSON string.

ConvertTo-Json:

-Depth

Specifies how many levels of contained objects are included in the JSON representation. The default value is 2.

Here is a tio.run link to a ConvertTo-Json example.

Hope that helps.

Sign up to request clarification or add additional context in comments.

Comments

0

I can't test it currently, but try this.

$postParams = @'
{
    "name":"Example",
    "template":{"name":"Template"},
    "url":"http://localhost",
    "page":{"name":"Landing Page"},
    "smtp":{"name":"Sending Profile"},
    "launch_date":"2019-10-08T17:20:00+00:00",
    "send_by_date":null,
    "groups":[{"name":"test group"}]
}
'@

Comments

0

Make a hashtable, then convert to JSON:

    $Hashtable = @{
        Key1 = "Value1"
        Key2 = "Value2"
    }

    $Json = $Hashtable | ConvertTo-Json

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.