The problem
JSON is the current format by excellence for sending messages and getting information via web services. But we usually have a big problem because of special characters like double quotes, let’s go back for a moment to remember how a well-formatted JSON looks:
{
"field" : "value"
}
As you know, previous is a well-formatted JSON block, but what happen if the “value” is something like this:
{
"title" : "I am creating the "definitive" guide to use encoding in WCM"
}
Previous code is going to fail for sure! and that’s because we are using double quotes in the “definitive” word as the value for the title, which breaks the well-formatted JSON we created.
The solution
Ok, now what can we do if we have IBM WCM 8.5 version? Easy, just add the jsencode plugin in next format:
{
"field" : "[Plugin:jsencode enc="js" value="SOMETHING_TO_ENCODE"]"
}
For example if you want to encode the title of pieces of content:
{
"title" : "[Plugin:jsencode enc="js" value="[Property context='autofill' type='content' field='title']"]"
}
What kind of output will we get using this plugin?
{
"title" : "I am creating the "definitive" guide to use encoding in WCM"
}
Finally, if you need to encode many fields, this is more complex example which encodes the author, title, siteTitle and the summary.
{
"date":"[Property context="autofill" type="content" format="relative" field="publishdate"]",
"author":"[Plugin:jsencode enc="js" value="[Property context='autofill' type='content' field='authors']"]",
"title":"[Plugin:jsencode enc="js" value="[Property context='autofill' type='content' field='title']"]",
"url":"[Placeholder tag="href"]",
"overrideURL": "",
"linkType":"",
"thumbnail":"[Element context="autofill" type="content" key="thumbnail" format="url"]",
"siteTitle":"[Plugin:jsencode enc="js" value="[Property context='autofill' type='top' field='title']"]",
"siteURL":"[URLCmpnt context="autofill" type="parent" mode="standalone"]",
"summary":"[Plugin:jsencode enc="js" value="[Element context='autofill' type='content' key='summary']"]"
}
Explanation
The principle behind this is simple: for every single JSON value using the plugin jsencode, WCM -behind the scenes- is going to execute a procedure to encode the HTML before rendering the page, which solves the issue in a great way!
That’s it for today, don’t forget to be happy with your code!
