json.sort: Difference between revisions

From RPTools Wiki
Jump to navigation Jump to search
m (Conversion script moved page Json.sort to json.sort: Converting page titles to lowercase)
No edit summary
Line 6: Line 6:


|usage=
|usage=
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
json.sort(array)
json.sort(array)
</source>
</syntaxhighlight>
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
json.sort(array, direction)
json.sort(array, direction)
</source>
</syntaxhighlight>
If you have a [[JSON Array]] that contains [[JSON Object]]s
If you have a [[JSON Array]] that contains [[JSON Object]]s
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
json.sort(array, direction, key1, ..., keyN)
json.sort(array, direction, key1, ..., keyN)
</source>
</syntaxhighlight>


'''Parameters'''
'''Parameters'''
Line 32: Line 32:
|examples=
|examples=
Sorting a [[JSON Array]] containing numbers.
Sorting a [[JSON Array]] containing numbers.
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
[json.sort("[1,4,5,6,2,1,9,20,1]")]
[json.sort("[1,4,5,6,2,1,9,20,1]")]
</source>
</syntaxhighlight>


Produces {{code|[1,1,1,2,4,5,6,9,20]}}
Produces {{code|[1,1,1,2,4,5,6,9,20]}}


Sorting a [[JSON Array]] containing strings.
Sorting a [[JSON Array]] containing strings.
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
[json.sort("['Hero', 'Dragon', 'Elf', 'Wolf', 'Mage', 'Eagle', 'Troll']")]
[json.sort("['Hero', 'Dragon', 'Elf', 'Wolf', 'Mage', 'Eagle', 'Troll']")]
</source>
</syntaxhighlight>


Produces {{code|["Dragon","Eagle","Elf","Hero","Mage","Troll","Wolf"]}}
Produces {{code|["Dragon","Eagle","Elf","Hero","Mage","Troll","Wolf"]}}


Sorting a mixture of numbers and strings (all will be treated as string).
Sorting a mixture of numbers and strings (all will be treated as string).
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
[json.sort("['Hero', 3, 'Elf', 'Wolf', 100, 'Eagle', 'Troll']")]
[json.sort("['Hero', 3, 'Elf', 'Wolf', 100, 'Eagle', 'Troll']")]
</source>
</syntaxhighlight>


Produces {{code|[100,3,"Eagle","Elf","Hero","Troll","Wolf"]}}
Produces {{code|[100,3,"Eagle","Elf","Hero","Troll","Wolf"]}}


Sorting objects by a single string key
Sorting objects by a single string key
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
[h:vals = '[ {name:"Hero", HP:10},  
[h:vals = '[ {name:"Hero", HP:10},  
             {name:"Wolf", HP:5},  
             {name:"Wolf", HP:5},  
Line 60: Line 60:
             {name:"Eagle", HP:5} ]']  
             {name:"Eagle", HP:5} ]']  
[json.sort(vals, "a", "name")]
[json.sort(vals, "a", "name")]
</source>
</syntaxhighlight>


Produces  
Produces  
Line 67: Line 67:


Sorting objects by a single numeric key
Sorting objects by a single numeric key
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
[h:vals = '[ {name:"Hero", HP:10},  
[h:vals = '[ {name:"Hero", HP:10},  
             {name:"Wolf", HP:5},  
             {name:"Wolf", HP:5},  
Line 74: Line 74:
             {name:"Eagle", HP:5} ]']  
             {name:"Eagle", HP:5} ]']  
[json.sort(vals, "a", "HP")]
[json.sort(vals, "a", "HP")]
</source>
</syntaxhighlight>


Produces  
Produces  
Line 81: Line 81:


Sorting objects by a two keys, first HP then Name.
Sorting objects by a two keys, first HP then Name.
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
[h:vals = '[ {name:"Hero", HP:10},  
[h:vals = '[ {name:"Hero", HP:10},  
             {name:"Wolf", HP:5},  
             {name:"Wolf", HP:5},  
Line 88: Line 88:
             {name:"Eagle", HP:5} ]']  
             {name:"Eagle", HP:5} ]']  
[json.sort(vals, "a", "HP", "name")]
[json.sort(vals, "a", "HP", "name")]
</source>
</syntaxhighlight>


Produces  
Produces  

Revision as of 17:37, 15 March 2023

json.sort() Function

Introduced in version 1.3b51
Used to sort JSON arrays. If the array contains only numbers, they are sorted numerically; otherwise, the values are sorted as strings alphabetically.

Usage

json.sort(array)
json.sort(array, direction)

If you have a JSON Array that contains JSON Objects

json.sort(array, direction, key1, ..., keyN)

Parameters

  • array - The JSON array to sort.
  • direction - Defaults to "ascending", acceptable values:
    • "ascending"
    • "descending"
    • "ascend"
    • "descend"
    • "asc"
    • "desc"
    • "a"
    • "d"
  • key1, ..., keyN - The keys in the JSON Objects contained within the JSON Array used for sorting. All JSON Objects must contain these fields.

Examples

Sorting a JSON Array containing numbers.
[json.sort("[1,4,5,6,2,1,9,20,1]")]

Produces [1,1,1,2,4,5,6,9,20]

Sorting a JSON Array containing strings.

[json.sort("['Hero', 'Dragon', 'Elf', 'Wolf', 'Mage', 'Eagle', 'Troll']")]

Produces ["Dragon","Eagle","Elf","Hero","Mage","Troll","Wolf"]

Sorting a mixture of numbers and strings (all will be treated as string).

[json.sort("['Hero', 3, 'Elf', 'Wolf', 100, 'Eagle', 'Troll']")]

Produces [100,3,"Eagle","Elf","Hero","Troll","Wolf"]

Sorting objects by a single string key

[h:vals = '[ {name:"Hero", HP:10}, 
             {name:"Wolf", HP:5}, 
             {name:"Mage", HP:20}, 
             {name:"Troll", HP:15}, 
             {name:"Eagle", HP:5} ]'] 
[json.sort(vals, "a", "name")]

Produces

[{"name":"Eagle","HP":5},{"name":"Hero","HP":10},{"name":"Mage","HP":20},{"name":"Troll","HP":15},{"name":"Wolf","HP":5}]

Sorting objects by a single numeric key

[h:vals = '[ {name:"Hero", HP:10}, 
             {name:"Wolf", HP:5}, 
             {name:"Mage", HP:20}, 
             {name:"Troll", HP:15}, 
             {name:"Eagle", HP:5} ]'] 
[json.sort(vals, "a", "HP")]

Produces

[{"name":"Wolf","HP":5},{"name":"Eagle","HP":5},{"name":"Hero","HP":10},{"name":"Troll","HP":15},{"name":"Mage","HP":20}]

Sorting objects by a two keys, first HP then Name.

[h:vals = '[ {name:"Hero", HP:10}, 
             {name:"Wolf", HP:5}, 
             {name:"Mage", HP:20}, 
             {name:"Troll", HP:15}, 
             {name:"Eagle", HP:5} ]'] 
[json.sort(vals, "a", "HP", "name")]

Produces

[{"name":"Eagle","HP":5},{"name":"Wolf","HP":5},{"name":"Hero","HP":10},{"name":"Troll","HP":15},{"name":"Mage","HP":20}]