Introduction
Hi all, I hope you all are fine. Today we will learn how to sort a JSON object by its property. We will be using normal jQuery features to do this. I hope you will like it.
Background
Yesterday I got a situation where I needed to sort my JSON object that I am creating using server data. So I though of sharing that with you all.
Using the code
First of all we will add a jQuery reference as in the following:
- <script src="jquery-2.1.4.min.js"></script>
- var data = '[{"name":2014,"data":[{"x":"1","y":222808746.81}]},{"name":2013,"data":[{"x":"2","y":289647045.18}]},{"name":2014,"data":[{"x":"2","y":285136890.07}]},{"name":2013,"data":[{"x":"3","y":370853178.74}]},{"name":2014,"data":[{"x":"3","y":403272964.28}]},{"name":2012,"data":[{"x":"4","y":217294031.36}]},{"name":2013,"data":[{"x":"4","y":224715039.94}]},{"name":2014,"data":[{"x":"4","y":249034460.23}]},{"name":2012,"data":[{"x":"5","y":215978054.15}]},{"name":2013,"data":[{"x":"5","y":241211810.92}]}]';
Next we need some UI elements. Am I right?
- <div id="unsorted"></div>
- <div id="sorted"></div>
- <button id="makemesort">Make Me Sort</button>
What next? We need to show this data to our UI, right? For that I am calling a function in our document ready function.
- var jsonObject;
- $(function () {
- $('#sorted').hide();
- loadUnsorted();
- $('#makemesort').click(function () {
- loadSorted();
- $('#makemesort').hide();
- $('#sorted').show();
- });
- });
- function loadUnsorted() {
- jsonObject = $.parseJSON(data);
- var html = '<table><th>Year</th><th>X Value</th><th>Y Value</th>';
- for (i = 0; i < jsonObject.length; i++) {
- html += '<tr><td>' + jsonObject[i].name + '</td><td>' + jsonObject[i].data[0].x + '</td><td>' + jsonObject[i].data[0].y + '</td></tr>';
- }
- html += '</table>';
- $('#unsorted').append(html);
- }
Now if you run it, you will get output as follows.
Now we have successfully formatted our data and shown it to our UI. Cool, right?
So shall we go and sort our data? I guess you said "Yes". Awesome.
Now we will create a click event for our "Make me sort" button as in the following:
- $('#makemesort').click(function () {
- loadSorted();
- $('#makemesort').hide();
- $('#sorted').show();
- });
- function loadSorted() {
- jsonObject.sort(SortMe);
- var html = '<table><th>Year</th><th>X Value</th><th>Y Value</th>';
- for (i = 0; i < jsonObject.length; i++) {
- html += '<tr><td>' + jsonObject[i].name + '</td><td>' + jsonObject[i].data[0].x + '</td><td>' + jsonObject[i].data[0].y + '</td></tr>';
- }
- html += '</table>';
- $('#sorted').append(html);
- }
- function SortMe(a, b) {
- if (b.name != null && b.name != undefined && a.name != null && a.name != undefined) {
- var First = a.name.toString().toLowerCase();
- var Second = b.name.toString().toLowerCase();
- return ((First < Second) ? -1 : ((First > Second) ? 1 : 0));
- }
- }
- (First < Second) ? -1 : ((First > Second) ? 1 : 0)
Complete Code
- <!DOCTYPE html>
- <html>
- <head>
- <title>Sort JSON Object by its property and show demo - Sibeesh Passion</title>
- <script src="jquery-2.1.4.min.js"></script>
- <style>
- #unsorted {
- border: 1px solid #999;
- width:220px;
- padding:10px;
- float:left;
- }
- #sorted {
- border: 1px solid #999;
- width:220px;
- padding:10px;
- float:left;
- }
- td {
- border: 1px solid #ccc;
- padding: 5px;
- text-align: center;
- }
- </style>
- <script>
- var data = '[{"name":2014,"data":[{"x":"1","y":222808746.81}]},{"name":2013,"data":[{"x":"2","y":289647045.18}]},{"name":2014,"data":[{"x":"2","y":285136890.07}]},{"name":2013,"data":[{"x":"3","y":370853178.74}]},{"name":2014,"data":[{"x":"3","y":403272964.28}]},{"name":2012,"data":[{"x":"4","y":217294031.36}]},{"name":2013,"data":[{"x":"4","y":224715039.94}]},{"name":2014,"data":[{"x":"4","y":249034460.23}]},{"name":2012,"data":[{"x":"5","y":215978054.15}]},{"name":2013,"data":[{"x":"5","y":241211810.92}]}]';
- var jsonObject;
- $(function () {
- $('#sorted').hide();
- loadUnsorted();
- $('#makemesort').click(function () {
- loadSorted();
- $('#makemesort').hide();
- $('#sorted').show();
- });
- });
- function loadUnsorted() {
- jsonObject = $.parseJSON(data);
- var html = '<table><th>Year</th><th>X Value</th><th>Y Value</th>';
- for (i = 0; i < jsonObject.length; i++) {
- html += '<tr><td>' + jsonObject[i].name + '</td><td>' + jsonObject[i].data[0].x + '</td><td>' + jsonObject[i].data[0].y + '</td></tr>';
- }
- html += '</table>';
- $('#unsorted').append(html);
- }
- function loadSorted() {
- jsonObject.sort(SortMe);
- var html = '<table><th>Year</th><th>X Value</th><th>Y Value</th>';
- for (i = 0; i < jsonObject.length; i++) {
- html += '<tr><td>' + jsonObject[i].name + '</td><td>' + jsonObject[i].data[0].x + '</td><td>' + jsonObject[i].data[0].y + '</td></tr>';
- }
- html += '</table>';
- $('#sorted').append(html);
- }
- function SortMe(a, b) {
- if (b.name != null && b.name != undefined && a.name != null && a.name != undefined) {
- var First = a.name.toString().toLowerCase();
- var Second = b.name.toString().toLowerCase();
- return ((First < Second) ? -1 : ((First > Second) ? 1 : 0));
- }
- }
- </script>
- </head>
- <body>
- <div id="unsorted"></div>
- <div id="sorted"></div>
- <button id="makemesort">Make Me Sort</button>
- </body>
- </html>
You can find we have sorted our object and shown it in a separate table. Cool.
That is all for the day. I will return with another article soon.
Conclusion
I hope you liked this article. Please share me your valuable thoughts and comments. Your feedbacks are always welcome. Thanks in advance. Happy coding!.
Kindest Regards.

Sibeesh VenuPosted May 28, 2015, 11:15 AM
Vivek Tripathi Thank you
Vivek TripathiPosted May 28, 2015, 10:27 AM
Nice:)