Sort field names alphabetically in JSON source data

Hi Team,

I have my source data coming in JSON format. I want to sort the fields inside the JSON format alphabetically. One way is to use a mapper and arrange them one-one alphabetically but it is a tedious task if the fields are more. Can we use an expression in mapper or any other snap that does this for us?

Thank you.

Best Regards,

Hi @darshthakkar,

One approach will be to Map the input document with the following expression:

$.entries().sort((a,b) => a[0].localeCompare(b[0])).reduce((acc,curr) => acc.extend({[curr[0]]:curr[1]}),{})

Note: This will only sort properties on first level.

Let me know if this helps.



Thank you @AleksandarAngelevski for your suggestion.
I will try it out and keep you posted with my findings…

1 Like

@AleksandarAngelevski - You’re right, Alphabetical sorting doesn’t work on the first level so you’ll have to break that hierarchy and once you’re at the final stage, your expression will definitely work, I’ve tested it and can confirm that it works.

How I broke the hierarchy: Using JSON Splitter to reorganise JSON - #3 by Supratim (thank you @Supratim for your comments on a different thread)

1 Like

@AleksandarAngelevski - Is it a safe assumption that we can use the same expression with a minor tweak to organize data alphabetically even if it’s not the JSON format?

Well, if the data that we have on input is in different format I might consider another approach because this is a special use case.

Makes sense, thank you @AleksandarAngelevski.

1 Like

Alternative expression

$.keys().sort().toObject((k,i)=> k, (k,i)=> $.get(k))


Thank you so much @alchemiz for your suggestion.
I’m sure it is going to work, will try and keep you posted…

Hey @alchemiz,

The solution you provided worked, the only consideration is that - “You need to be at the bottom of the hierarchy for sorting to work”.

Thank you, anyways :slight_smile:

As we cannot mark multiple suggestions as “Solutions”, wanted to summarize the solution that will work for this use case:

1. $.entries().sort((a,b) => a[0].localeCompare(b[0])).reduce((acc,curr) => acc.extend({[curr[0]]:curr[1]}),{})

2. $.keys().sort().toObject((k,i)=> k, (k,i)=> $.get(k))

Both the expressions mentioned above will ONLY work if we are at the last stage of the hierarchy.

How I broke the hierarchy: Using JSON Splitter to reorganise JSON - #3 by Supratim

Thank you @AleksandarAngelevski , @alchemiz and @Supratim for your inputs. Closing this thread now.

1 Like

$.keys().sort().reverse().toObject((k,i)=> k, (k,i)=> $.get(k))

1 Like

Yup, this is for sorting in reverse alphabetical order. Thank you @alchemiz