cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
MichelH
Advocate V
Advocate V

JSON function using JSONFormat.IndentFour not working as suggested in documentation

I read the JSONFormat.IndentFour option should be able to format a json string, giving it proper indenting so it becomes readable.

 

The example I found here uses a label to display the formated json text.

It even shows a coloured formatted JSON output. (could it be real?)

 

When I try to do the same, I do not see this result unfortunately.

 

My plain JSON text, displayed in a label looks like this:

{"name":"c43187c3-3693-4ac9-844f-08dfefd8f09d","id":"/providers/Microsoft.Flow/....

After using the JSON function:

Set( OutPutTxt , JSON( MyJSONtxt ,JSONFormat.IndentFour ));

the output in the label looks like this:

"{\"name\":\"c43187c3-3693-4ac9-844f-08dfefd8f09d\",\"id\":\"/providers/Microsoft.Flow/....

 

Has anyone tried? Does anyone see where I go wrong here?

 

I've tried the same in an input field, and a rich text field.

I see the same results.

 

Thanks for any feedback.

21 REPLIES 21
Pstork1
Dual Super User III
Dual Super User III

If you look at the example you will see that the collection used to feed the JSON has no quotes around the field names.  Try the following syntax instead of what you posted

ClearCollect(jsonTXT, {name:"c43187c3-3693-4ac9-844f-08dfefd8f09d",id:"/providers/Microsoft.Flow/"}); Set( OutPutTxt , JSON( jsonTXT ,JSONFormat.IndentFour ));


-------------------------------------------------------------------------
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 ,

 

As you can see in the example I gave, the original json does not have any quotes around it.

 

In fact the quotes you see as well as the \" are added, when I use the JSON function. 

 

Michel

Pstork1
Dual Super User III
Dual Super User III

I wasn't talking about quotes around the JSON itself.  I was talking about quotes around the field names, like "name" and "id".  JSON in Power Apps doesn't want the field names inside the JSON to be quoted.  You'll notice in my example they are not.



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

Ah I see it now.

 

So the input is kind of restricted.

I'm getting my json from flow (power automate), and it is correct json AFAIK.

There is nothing wrong with quotes around the field names, in fact they are required when the name has a space in it.

I thought the JSON function would be able to handle that.  

My external json formatters are OK with that.

 

I guess I will need to figure out my own conversion then.

 

Thanks for your feedback.

 

It is good to know the limitations.

 

Michel

 

 

@Pstork1 

 

Actually the example on the microsoft side also has these quotes. 

 

[{"Cities":[{"City":"London","Population":8615000}],"Country":"United Kingdom"},{"Cities":[{"City":"Berlin","Population":3562000},{"City":"Hamburg","Population":1760000},{"City":"Munich","Population":1494000}],"Country":"Germany"},{"Cities":[{"City":"Madrid","Population":3165000},{"City":"Barcelona","Population":1602000}],"Country":"Spain"}]

 

And there it doesn't seem to matter.

 

[
    {
        "Cities": [
            {
                "City": "London",
                "Population": 8615000
            }
        ],
        "Country": "United Kingdom"
    },
    {
        "Cities": [
            {
                "City": "Berlin",
                "Population": 3562000
            },
            {
                "City": "Hamburg",
                "Population": 1760000
            },
            {
                "City": "Munich",
                "Population": 1494000
            }
        ],
        "Country": "Germany"
    },
    {
        "Cities": [
            {
                "City": "Madrid",
                "Population": 3165000
            },
            {
                "City": "Barcelona",
                "Population": 1602000
            }
        ],
        "Country": "Spain"
    }
]

 

How did you become aware of this limitation?

 

Is this behaviour documented anywhere?

 

I feel it is more like a bug.

 

Michel

Pstork1
Dual Super User III
Dual Super User III

That's not what I'm seeing on that page in the example.  Here's the text from the example

ClearCollect( CityPopulations,
    { City: "London",    Country: "United Kingdom", Population: 8615000 },
    { City: "Berlin",    Country: "Germany",        Population: 3562000 },
    { City: "Madrid",    Country: "Spain",          Population: 3165000 },
    { City: "Hamburg",   Country: "Germany",        Population: 1760000 },
    { City: "Barcelona", Country: "Spain",          Population: 1602000 },
    { City: "Munich",    Country: "Germany",        Population: 1494000 }
);
ClearCollect( CitiesByCountry, GroupBy( CityPopulations, "Country", "Cities" ) )

Notice that City, Country, and Population are NOT surrounded by quotes. 



-------------------------------------------------------------------------
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,

 

Indeed, bad reading on my part.

 

I tested your suggestion of course,

{name:"c43187c3-3693-4ac9-844f-08dfefd8f09d",id:"/providers/Microsoft.Flow/",test:{p:"p", q:"q", r:"r"}}

and see that then, it does give the formatted output as expected.

{
    "id": "/providers/Microsoft.Flow/",
    "name": "c43187c3-3693-4ac9-844f-08dfefd8f09d",
    "test": {
        "p": "p",
        "q": "q",
        "r": "r"
    }
}

 

But now of course I need a way to filter the quotes around the field names in the json I get from flow.

 

Bit of a catch22, and quite strange that it generates a json format, it won't accept itself. 

 

Pstork1
Dual Super User III
Dual Super User III

What is actually producing the JSON?  If the JSON is coming from Flow try just loading it directly into a collection.  That's what I normally do and then the collection works like the one manually created in the article.  For example I've got a Flow that runs a SQL stored procedure.  The schema of the returned JSON looks like this:

{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "Title": {
                "type": "string"
            }, ...

But using a ClearCollect I can load that directly into a collection.

ClearCollect(SqlData,SqlGetActive.Run(DatePicker1.SelectedDate))

I think the problem you are running into is that you are trying to load the JSON from a string, not from a collection (ARRAY).



-------------------------------------------------------------------------
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,

 

I'm loading a variable directly from a Flow.Run

Set(FlowRes, FlowAction2.Run("Get",Gallery1.Selected.Id).res );

 The 'res' is the body output from the 'Get Flow' connector.

 

So what I get back cannot go into an array first.  🙂  It is not an array.

 

Michel

 

 

 

Helpful resources

Announcements
PA User Group

Welcome to the User Group Public Preview

Check out new user group experience and if you are a leader please create your group

secondImage

Demo Extravaganza is Back!

We are excited to announce that Demo Extravaganza for 2021 has started!

MBAS on Demand

Microsoft Business Applications Summit sessions

On-demand access to all the great content presented by the product teams and community members! #MSBizAppsSummit #CommunityRocks

Power Apps June 2021

June Power Apps Community Call

Did you miss the call? Check out the recording here!

Top Solution Authors
Top Kudoed Authors
Users online (24,930)