Created
February 25, 2026 07:18
-
-
Save trycf/384469cfe5b9941c6b2c24da48fc5cc0 to your computer and use it in GitHub Desktop.
TryCF Gist
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <cfscript> | |
| private numeric function sortJsonLdKeys(any a = "", any b = "") { | |
| // @context comes first | |
| if (a == "@context") return -1; | |
| else if (b == "@context") return 1; | |
| // Meta properties like @context, @id and @type come second | |
| var aIsMeta = (left(arguments.a, 1) == "@"); | |
| var bIsMeta = (left(arguments.b, 1) == "@"); | |
| if (aIsMeta && bIsMeta) return compareNoCase(arguments.a, arguments.b); | |
| else if (aIsMeta) return -1; | |
| else if (bIsMeta) return 1; | |
| // IDs come third | |
| var aIsID = (arguments.a == "ID"); | |
| var bIsID = (arguments.b == "ID"); | |
| if (aIsID) return -1; | |
| else if (bIsID) return 1; | |
| aIsID = (right(arguments.a, 2) == "Id"); | |
| bIsID = (right(arguments.b, 2) == "Id"); | |
| if (aIsID && bIsID) return compareNoCase(arguments.a, arguments.b); | |
| else if (aIsID) return -1; | |
| else if (bIsID) return 1; | |
| aIsID = (left(arguments.a, 2) == "By"); | |
| bIsID = (left(arguments.b, 2) == "By"); | |
| if (aIsID && bIsID) return compareNoCase(arguments.a, arguments.b); | |
| else if (aIsID) return -1; | |
| else if (bIsID) return 1; | |
| // Timestamps come last | |
| var aIsTimestamp = (arguments.a == "ts" || arguments.a == "tsUpdate" || arguments.a == "timestamp" || right(arguments.a, 2) == "At"); | |
| var bIsTimestamp = (arguments.b == "ts" || arguments.b == "tsUpdate" || arguments.b == "timestamp" || right(arguments.b, 2) == "At"); | |
| if (aIsTimestamp && bIsTimestamp) return compareNoCase(arguments.a, arguments.b); | |
| else if (aIsTimestamp) return 1; | |
| else if (bIsTimestamp) return -1; | |
| return compareNoCase(arguments.a, arguments.b); | |
| } | |
| private numeric function structKeySort(value1, value2, key1, key2) { | |
| return sortJsonLdKeys(key1, key2); | |
| } | |
| //myStruct=StructNew(); | |
| value={"@id":"Berlin", "@context":"London","id":"Paris","orderID":"New York","b":"Dublin"}; | |
| writeDump(value); | |
| WriteOutput(serializeJSON(value)); | |
| mySort=StructSort(value, structKeySort); | |
| writeDump(mySort); | |
| writeDump(value); | |
| WriteOutput(serializeJSON(value)); | |
| </cfscript> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment