“There’s such a mess among the dynamic contents, can I somehow improve JSON schema in Parse JSON action to get better outputs?”
As you probably already know by now, Power Automate is based on JSON – all the inputs and outputs are in JSON, no matter what action you use. Which is why the ‘Parse JSON’ can help you convert output of any action into dynamic contents.
However, it turns the JSON into a flat structure, making it hard to find the desired value. That’s why I avoided this action in the past and used expressions to get the values instead. But it doesn’t have to be that way! This article will show you a few improvements to the JSON schema to avoid these situations.

Clean up the sample JSON
Firstly, don’t just take the whole JSON output and paste in as a sample, but remove the properties you don’t need. For example, when getting previous version of a SharePoint item you don’t need all the metadata, maybe the Title is enough.
Take the whole output JSON and remove every property except the ones to keep. Be careful about keeping all the brackets in correct place.

Use only the reduced JSON as the schema and the dynamic contents will be much easier to access.

Deal with possible empty values
The most common problem with the ‘Parse JSON’ action are null values. “Invalid type. Expected String but got Null“.
Each property contains the data type in the JSON schema, in the example below it is a string.

If the value contains anything else than a string, e.g. a null value, the ‘Parse JSON’ action will fail. To avoid the problem you must expand the supported types, tell it that it can have different value types too (if it can).
Replace the type with the anyOf property allowing more data types than just one.
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]

Change property display name
If you still have some properties with the same name in the schema, or if you just want to make them more recognisable, you can rename them using the JSON schema. Just add the ‘title’ property to the object.
"properties": {
"Title": {
"type": "string",
"title": "My new name"
}
}

Add property description
And if changing the property name is not enough, you can add a description too, by adding the ‘description’ property into the object.
"properties": {
"Title": {
"type": "string",
"description": "The title of the item."
}
}
The dynamic content will display not only the property name, but the description too.

Summary
As you can see, if you improve JSON schema in Parse JSON the action can be quite useful after all – you just have to adjust it a bit.
The first step is probably the most important one – don’t just paste the whole output as a schema, keep only the properties you want to use later. Add support for null values, maybe add a few descriptions, and make the output from ‘Parse JSON’ more user friendly. This way you don’t need expressions to get to the values, everything you need can be easily accessible as dynamic contents.
how about data not string?