Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Script to sort a JSON string

Engaged ,
Dec 22, 2022 Dec 22, 2022

I need a script to sort a JSON string by name similar to the sample provided below.

var data = {
"Tom":{
"id": "20114",
"age": "21",
"gender": "men"
},
"John":{
"id": "28957",
"age": "20",
"gender": "men"
},
"Sara":{
"id": "8957",
"age": "24",
"gender": "women"
},
"Rose":{
"id": "2178",
"age": "22",
"gender": "women"
}
}

Thank you ahead of time.

TOPICS
How to , JavaScript , PDF forms
848
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Dec 22, 2022 Dec 22, 2022

what do you mean by sort?  Object members do not have an ordering that can be controlled. 

Do you want the ordering so that the elements will appear alphabetically in a list or dropdown?  If so then it would be better to sort the items when added to the list.

 

For example

 

var aNameList = [];
for(var nm in data )
    aNameList.push(nm);

// Now sort the list
aNameList.sort();

// then add to dropdown
this.getField("mydropdown").setItems(aNameList);

 

Thom Parker - Software Developer at PDFScripting
Use the Acrobat JavaScript Reference early and often

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Dec 22, 2022 Dec 22, 2022

Thom,

 

That's what I have been doing (sorting the items when added to the list), however I was under the assumption that if I used JSON.parse on a JSON string I could then sort the data after adding another name and its properties in which case the multidimensional array has now been presorted by name so when converted back to a string, it no longer requires sorting when updating my drop down list. Just thought I could get rid of sorting the temporary array that loads and updates the drop down list. Does that make sense even though the stored data as a string really doesn't have to be in alphabetical order since the drop list always will be the way I've been doing it? 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Dec 22, 2022 Dec 22, 2022

So in brief, the sample JSON string I provided in my initial post cannot be sorted alphabetically by name once I use JSON. parse? Once again, I realize I can extract the names to create a tempoary array and sort by name to use to replace/update my drop down list. I was just under the impression this could also be achieved by using JSON.parse and presorting the objet array by name but if I understand you correctly, the object cannot be sorted in this manner.  

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 23, 2022 Dec 23, 2022
LATEST

A JSON string cannot be sorted on its key names and left as JSON. Well, it can but when the JSON is read, there is no order to it. You need to sort the JSON as you use it, or convert it to another format. 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines