BoxLang 🚀 A New JVM Dynamic Language Learn More...
Author: Brandon Shea
CFWheel use's serializeJSON when rendering content as JSON. The results vary based on the Coldfusion engine in use. In order to have more control of the resulting data, this plugin overrides core.renderWith() to use Ben Nadel's JsonSerializer instead of serializeJson().
Below, I've used several config files to define my mappings, which are called by an index file that initializes a serializer and uses those configs to define the mappings. This setup is not requried, but it simplifies the setup imo. If there is no serializer defined in params or application.wheels scope, a default one will be initialized for the serialization attempt.
<cfscript>
writeLog("Initializing serializer mappings...");
include "./anys.cfm";
include "./booleans.cfm";
include "./dates.cfm";
include "./floats.cfm";
include "./integers.cfm";
include "./strings.cfm";
include "./excludes.cfm";
serializer = initBenSerializerDefault();
for (key in anys) serializer.asAny(key);
for (key in booleans) serializer.asBoolean(key);
for (key in dates) serializer.asDate(key);
for (key in floats) serializer.asFloat(key);
for (key in integers) serializer.asInteger(key);
for (key in strings) serializer.asString(key);
for (key in excludes) serializer.exclude(key);
writeLog("Serializer mappings initialized.");
</cfscript>
Copied & Modified for CFWheels by Brandon Shea
Originaly by Ben Nadel
Original source at Github
ColdFusion is a case insensitive language. However, it often has to communicate with languages, like JavaScript, that are not case sensitive. During the data serialization workflow, this mismatch of casing can cause a lot of headaches, especially when ColdFusion is your API-back-end to a rich-client JavaScript front-end application.
JsonSerializer.cfc is a ColdFusion component that helps ease this transition by performing the serialization to JavaScript Object Notation (JSON) using a set of developer-defined rules for case-management and data-conversion-management. Essentially, you can tell the serializer what case to use, no matter what case the data currently has.
The keys are defined using an all-or-nothing approach. By that, I mean that the serializer doesn't care where it encounters a key - if it matches, it will be given the explicitly defined casing. So, if you want to use "id" in one place and "ID" in another place within the same data-structure, you're out of luck. Both keys will match "id" and will be given the same case.
This is primarily intended to be used to return data from a server-side API. As part of that use-case, some of my philosophy is baked into it. Namely, an API usually returns a top-level struct / hash-map that defines the API result. This is why the serialization process is driven by the name of keys.
$
box install cfwheels-bens-json-serializer