cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Medoomi
Responsive Resident
Responsive Resident

Parse JSON - validation failed for null values - how to avoid?

I have a PowerApps instant cloud flow which receives a JSON array as a string

I am attempting to parse the JSON, which mostly works... except when null values appear in the string, at which point the validation fails. The schema it uses is as follows:

{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "Address1stLine": {
                "type": "string"
            },
            "Address2ndLine": {
                "type": "string"
            },
            "City": {
                "type": "string"
            },
            "ContractType": {
                "type": "string"
            },
            "CreatedOn": {
                "type": "string"
            },
            "Customer": {
                "type": "string"
            },
            "OperatingUnit": {
                "type": "string"
            },
            "ProjectName": {
                "type": "string"
            },
            "RSMeansAuditDate": {
                "type": "string"
            },
            "RequestNumber": {
                "type": "string"
            },
            "SalespersonName": {
                "type": "string"
            },
            "ScopeOfWork": {
                "type": "string"
            },
            "State": {
                "type": "string"
            },
            "Zip": {
                "type": "string"
            }
        },
        "required": [
            "Address1stLine",
            "Address2ndLine",
            "City",
            "ContractType",
            "CreatedOn",
            "Customer",
            "OperatingUnit",
            "ProjectName",
            "RSMeansAuditDate",
            "RequestNumber",
            "SalespersonName",
            "ScopeOfWork",
            "State",
            "Zip"
        ]
    }
}

Is my problem that the fields are marked as "required?"

Or how might I parse a JSON string with null values included in it?

2 ACCEPTED SOLUTIONS

Accepted Solutions
Pstork1
Most Valuable Professional
Most Valuable Professional

To handle null values you need to change the "type": setting for that property from "string" to ["string", "null"].  This will let that property be either a string or null.  You should also remove that particular property from the list of required columns.



-------------------------------------------------------------------------
If I have answered your question, please mark your post as Solved.
If you like my response, please give it a Thumbs Up.

View solution in original post

Pstork1
Most Valuable Professional
Most Valuable Professional

I did some testing and it looks like some things have changed in the filtering of dynamic content.  Allowing "null" values will indeed filter the values out of the dynamic content dialog.  But the JSON representation of the field can still be entered and it will return the value, either the real one or the null.  So here's the workaround. Don't add the ["string", "null"] changes to the schema until after you have added the fields in any later statements that use the field.  Just add it before you run it the first time.  The flow will work, even though the fields won't show in the editor after making the change.



-------------------------------------------------------------------------
If I have answered your question, please mark your post as Solved.
If you like my response, please give it a Thumbs Up.

View solution in original post

14 REPLIES 14
Pstork1
Most Valuable Professional
Most Valuable Professional

To handle null values you need to change the "type": setting for that property from "string" to ["string", "null"].  This will let that property be either a string or null.  You should also remove that particular property from the list of required columns.



-------------------------------------------------------------------------
If I have answered your question, please mark your post as Solved.
If you like my response, please give it a Thumbs Up.

Thanks so much @Pstork1 !

It looks like this will work... except after changing the Schema of the Parse JSON, I cannot find the various data fields in the dynamic content picker (eg. Address1stLine). All that is available is "Item", and "Body."

Is there a way still to have those fields available in the dynamic content picker? I suppose I can figure out how to enter the various expressions manually, but it would be nice to have the more user-friendly labeling of the dynamic picker...

thanks!

Pstork1
Most Valuable Professional
Most Valuable Professional

The change I suggested should not effect the appearance of the data in the dynamic content dialog.  Something is off in your JSON Schema.  Try creating it from scratch and making the changes I suggested again.



-------------------------------------------------------------------------
If I have answered your question, please mark your post as Solved.
If you like my response, please give it a Thumbs Up.

Thank you so very much again for your reply @Pstork1 

I have tried reconstructing the schema again, with the same result that the dynamic content becomes unavailable.

The schema as I have it is as follows. I have tried with and without "required" fields being present.

{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "Address1stLine": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "Address2ndLine": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "City": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "ContractType": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "CreatedOn": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "Customer": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "OperatingUnit": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "ProjectName": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "RSMeansAuditDate": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "RequestNumber": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "SalespersonName": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "ScopeOfWork": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "State": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "Zip": {
                "type": [
                    "string",
                    "null"
                ]
            }
        },
        "required": []
    }
}

Can you see anything I am doing wrong?

Pstork1
Most Valuable Professional
Most Valuable Professional

Can you provide a small sample of the data you are trying to parse?



-------------------------------------------------------------------------
If I have answered your question, please mark your post as Solved.
If you like my response, please give it a Thumbs Up.

Sure! It only sends one record. Here is some sample data from the last run:

[{"Address1stLine":"6001 E. 600 S.","Address2ndLine":"","City":"Montgomery","ContractType":"Gordian Zone #5","CreatedOn":"2/3/2021","Customer":"something customer","OperatingUnit":"company name","ProjectName":"Mitchell - Warehouse Bldg. ","RSMeansAuditDate":null,"RequestNumber":"","SalespersonName":"John Smith","ScopeOfWork":"","State":"Indiana","Zip":"47558"}]
Pstork1
Most Valuable Professional
Most Valuable Professional

I did some testing and it looks like some things have changed in the filtering of dynamic content.  Allowing "null" values will indeed filter the values out of the dynamic content dialog.  But the JSON representation of the field can still be entered and it will return the value, either the real one or the null.  So here's the workaround. Don't add the ["string", "null"] changes to the schema until after you have added the fields in any later statements that use the field.  Just add it before you run it the first time.  The flow will work, even though the fields won't show in the editor after making the change.



-------------------------------------------------------------------------
If I have answered your question, please mark your post as Solved.
If you like my response, please give it a Thumbs Up.

Perfect, thank you so very much!

Hello Folks,

I am having exactly similar issues parsing Jason values. I am trying to call Graph API & get Announcement messages & trying to save in SharePoint list. I'll show my flow details, but here is the error I get:

 

The execution of template action 'Apply_to_each_2' failed: the result of the evaluation of 'foreach' expression '@body('Parse_JSON')?['body']?['value']' is of type 'Null'. The result must be a valid array.

 

arindam40_0-1645856112462.png

Calling https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages successuully, in Graph explorer & in the FLow. Till there its Ok. 

Then I created the JSON Schema by pasting the downloaded the value. Here is the schema:

{
"type": "object",
"properties": {
"statusCode": {
"type": "integer"
},
"headers": {
"type": "object",
"properties": {
"Transfer-Encoding": {
"type": "string"
},
"Vary": {
"type": "string"
},
"Strict-Transport-Security": {
"type": "string"
},
"request-id": {
"type": "string"
},
"client-request-id": {
"type": "string"
},
"x-ms-ags-diagnostic": {
"type": "string"
},
"OData-Version": {
"type": "string"
},
"Date": {
"type": "string"
},
"Content-Type": {
"type": "string"
},
"Content-Length": {
"type": "string"
}
}
},
"body": {
"type": "object",
"properties": {
"@@odata.context": {
"type": "string"
},
"@@odata.nextLink": {
"type": "string"
},
"value": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"properties": {
"startDateTime": {
"type": "string"
},
"endDateTime": {
"type": "string"
},
"lastModifiedDateTime": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"id": {
"type": "string"
},
"category": {
"type": "string"
},
"severity": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"isMajorChange": {
"type": "boolean"
},
"actionRequiredByDateTime": {},
"services": {
"type": [
"string",
"null"
],
"items": {
"type": "string"
}
},
"expiryDateTime": {},
"hasAttachments": {
"type": [
"boolean",
"null"
]
},
"viewPoint": {},
"details": {
"type": [
"string",
"null"
]
},
"body": {
"type": "object",
"properties": {
"contentType": {
"type": "string"
},
"content": {
"type": "string"
}
}
}
},
"required": [
"startDateTime",
"endDateTime",
"lastModifiedDateTime",
"title",
"id",
"category",
"severity",
"tags",
"isMajorChange",
"actionRequiredByDateTime",
"services",
"expiryDateTime",
"hasAttachments",
"viewPoint",
"details",
"body"
]
}
}
}
}
}
}

This is how my flow looks like

arindam40_1-1645856585675.png

Please let me know, what changes are required. I can try the solution mentioned above, but where all should I make these changes.

Any help would be great.

 

Thanks

Arindam

Pstork1
Most Valuable Professional
Most Valuable Professional

As the error message says, one of the values in your array is null and can't be processed.  There are two ways to fix it.  First, you could add a filter array before using the array in the inner apply to Each 2 loop to filter out elements with Null values. Or you could add a Coalesce() function around the array used in the loop to substitute an empty array if the array being processed is null.  Something like this

coalesce(body('Parse_JSON')?['body']?['value'],createArray(''))


-------------------------------------------------------------------------
If I have answered your question, please mark your post as Solved.
If you like my response, please give it a Thumbs Up.

Hi pstork1,

This issue is resolved now. I dont know why, but the schema I generated to parse JSON was not proper.

 

Thanks

Arindam

 

Hi @Medoomi and @Pstork1,

I have another solution for writing your schemas to allow null values while maintaining the ability to use dynamic content without having to manually type the references.

While the method of setting your property types in an array will pass the schema validation, Power Automate prefers a slightly different syntax. Try using the "anyOf" syntax instead. For example:

 

{
  "property_name": {
    "anyOf": [
      {"type": "string"},
      {"type": "null"}
    ]
  },
  "required": [
    "property_name"
  ]
}

 

It's a bit annoying because it's essentially the same thing. However, using "anyOf" (in my experience) allows you to select the dynamic content in the actions that follow your Parse JSON action.

I hope this helps!

Pstork1
Most Valuable Professional
Most Valuable Professional

Interesting workaround. I'll try it the next time I get a chance. I haven't seen an issue with the regular array forcing manual entry of the JSON. But you do have to make sure the logic allows for null values. 



-------------------------------------------------------------------------
If I have answered your question, please mark your post as Solved.
If you like my response, please give it a Thumbs Up.

I sincerely appreciate it. I was able to solve my problem.

{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "@@odata.type": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "Claims": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "DisplayName": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "Email": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "Picture": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "Department": {
                "type": [
                    "string",
                    "null"
                ]
            },
            "JobTitle": {
                "type": [
                    "string",
                    "null"
                ]
            }
        },
        "required": [
            "@@odata.type",
            "Claims",
            "DisplayName",
            "Email",
            "Picture",
            "Department",
            "JobTitle"
        ]
    }
}

 

Helpful resources

Announcements

Community will be READ ONLY July 16th, 5p PDT -July 22nd

Dear Community Members,   We'd like to let you know of an upcoming change to the community platform: starting July 16th, the platform will transition to a READ ONLY mode until July 22nd.   During this period, members will not be able to Kudo, Comment, or Reply to any posts.   On July 22nd, please be on the lookout for a message sent to the email address registered on your community profile. This email is crucial as it will contain your unique code and link to register for the new platform encompassing all of the communities.   What to Expect in the New Community: A more unified experience where all products, including Power Apps, Power Automate, Copilot Studio, and Power Pages, will be accessible from one community.Community Blogs that you can syndicate and link to for automatic updates. We appreciate your understanding and cooperation during this transition. Stay tuned for the exciting new features and a seamless community experience ahead!

Summer of Solutions | Week 4 Results | Winners will be posted on July 24th

We are excited to announce the Summer of Solutions Challenge!    This challenge is kicking off on Monday, June 17th and will run for (4) weeks.  The challenge is open to all Power Platform (Power Apps, Power Automate, Copilot Studio & Power Pages) community members. We invite you to participate in a quest to provide solutions to as many questions as you can. Answers can be provided in all the communities.    Entry Period: This Challenge will consist of four weekly Entry Periods as follows (each an “Entry Period”)   - 12:00 a.m. PT on June 17, 2024 – 11:59 p.m. PT on June 23, 2024 - 12:00 a.m. PT on June 24, 2024 – 11:59 p.m. PT on June 30, 2024 - 12:00 a.m. PT on July 1, 2024 – 11:59 p.m. PT on July 7, 2024 - 12:00 a.m. PT on July 8, 2024 – 11:59 p.m. PT on July 14, 2024   Entries will be eligible for the Entry Period in which they are received and will not carryover to subsequent weekly entry periods.  You must enter into each weekly Entry Period separately.   How to Enter: We invite you to participate in a quest to provide "Accepted Solutions" to as many questions as you can. Answers can be provided in all the communities. Users must provide a solution which can be an “Accepted Solution” in the Forums in all of the communities and there are no limits to the number of “Accepted Solutions” that a member can provide for entries in this challenge, but each entry must be substantially unique and different.    Winner Selection and Prizes: At the end of each week, we will list the top ten (10) Community users which will consist of: 5 Community Members & 5 Super Users and they will advance to the final drawing. We will post each week in the News & Announcements the top 10 Solution providers.  At the end of the challenge, we will add all of the top 10 weekly names and enter them into a random drawing.  Then we will randomly select ten (10) winners (5 Community Members & 5 Super Users) from among all eligible entrants received across all weekly Entry Periods to receive the prize listed below. If a winner declines, we will draw again at random for the next winner.  A user will only be able to win once overall. If they are drawn multiple times, another user will be drawn at random.  Individuals will be contacted before the announcement with the opportunity to claim or deny the prize.  Once all of the winners have been notified, we will post in the News & Announcements of each community with the list of winners.   Each winner will receive one (1) Pass to the Power Platform Conference in Las Vegas, Sep. 18-20, 2024 ($1800 value). NOTE: Prize is for conference attendance only and any other costs such as airfare, lodging, transportation, and food are the sole responsibility of the winner. Tickets are not transferable to any other party or to next year’s event.   ** PLEASE SEE THE ATTACHED RULES for this CHALLENGE**   Week 1 Results: Congratulations to the Week 1 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Community MembersNumber SolutionsSuper UsersNumber Solutions Deenuji 9 @NathanAlvares24  17 @Anil_g  7 @ManishSolanki  13 @eetuRobo  5 @David_MA  10 @VishnuReddy1997  5 @SpongYe  9JhonatanOB19932 (tie) @Nived_Nambiar  8 @maltie  2 (tie)   @PA-Noob  2 (tie)   @LukeMcG  2 (tie)   @tgut03  2 (tie)       Week 2 Results: Congratulations to the Week 2 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Week 2: Community MembersSolutionsSuper UsersSolutionsPower Automate  @Deenuji  12@ManishSolanki 19 @Anil_g  10 @NathanAlvares24  17 @VishnuReddy1997  6 @Expiscornovus  10 @Tjan  5 @Nived_Nambiar  10 @eetuRobo  3 @SudeepGhatakNZ 8     Week 3 Results: Congratulations to the Week 3 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Week 3:Community MembersSolutionsSuper UsersSolutionsPower Automate Deenuji32ManishSolanki55VishnuReddy199724NathanAlvares2444Anil_g22SudeepGhatakNZ40eetuRobo18Nived_Nambiar28Tjan8David_MA22   Week 4 Results: Congratulations to the Week 4 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Week 4:Community MembersSolutionsSuper UsersSolutionsPower Automate Deenuji11FLMike31Sayan11ManishSolanki16VishnuReddy199710creativeopinion14Akshansh-Sharma3SudeepGhatakNZ7claudiovc2CFernandes5 misc2Nived_Nambiar5 Usernametwice232rzaneti5 eetuRobo2   Anil_g2   SharonS2  

Check Out | 2024 Release Wave 2 Plans for Microsoft Dynamics 365 and Microsoft Power Platform

On July 16, 2024, we published the 2024 release wave 2 plans for Microsoft Dynamics 365 and Microsoft Power Platform. These plans are a compilation of the new capabilities planned to be released between October 2024 to March 2025. This release introduces a wealth of new features designed to enhance customer understanding and improve overall user experience, showcasing our dedication to driving digital transformation for our customers and partners.    The upcoming wave is centered around utilizing advanced AI and Microsoft Copilot technologies to enhance user productivity and streamline operations across diverse business applications. These enhancements include intelligent automation, AI-powered insights, and immersive user experiences that are designed to break down barriers between data, insights, and individuals. Watch a summary of the release highlights.    Discover the latest features that empower organizations to operate more efficiently and adaptively. From AI-driven sales insights and customer service enhancements to predictive analytics in supply chain management and autonomous financial processes, the new capabilities enable businesses to proactively address challenges and capitalize on opportunities.    

Updates to Transitions in the Power Platform Communities

We're embarking on a journey to enhance your experience by transitioning to a new community platform. Our team has been diligently working to create a fresh community site, leveraging the very Dynamics 365 and Power Platform tools our community advocates for.  We started this journey with transitioning Copilot Studio forums and blogs in June. The move marks the beginning of a new chapter, and we're eager for you to be a part of it. The rest of the Power Platform product sites will be moving over this summer.   Stay tuned for more updates as we get closer to the launch. We can't wait to welcome you to our new community space, designed with you in mind. Let's connect, learn, and grow together.   Here's to new beginnings and endless possibilities!   If you have any questions, observations or concerns throughout this process please go to https://aka.ms/PPCommSupport.   To stay up to date on the latest details of this migration and other important Community updates subscribe to our News and Announcements forums: Copilot Studio, Power Apps, Power Automate, Power Pages

Users online (1,663)