Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

Valid JSON using CMS

Go to End

5 Posts   2710 Views


Community Member, 44 Posts

11 September 2011 at 9:27am

Edited: 11/09/2011 9:42am

I am trying to create a valid JSON string so that I can use Jquery .ajax to pull some events into different places on the web. I created a method on my EventsPage_Controller called jsonDates

	public function jsonDates() {
		$events =  DataObject::get('Event');
		$output = array(); $i = 0;
		foreach($events as $event) {			
			$output[$i] = array(
				'start'	=> $event->EventDate, 
				'title' 	=> $event->EventTitle, 
				'id' 		=> $event->ID, 
				'thumb'	=> $event->EventThumbnail()->Link(),
				'cover'	=> $event->Image()->Link(),
				'desc'	=> $event->Desc,
				'link'		=> $event->EventLink,
		return json_encode($output);

Here's a snippet of the JSON i get when I navigate to

{"start":"2011-09-16 16:33:09","title":"Test Event","id":30,"thumb":"\/\/assets\/","cover":"\/\/assets\/","desc":"
This is a test event.<\/p>","link":"http:\/\/"}

When I run the snippet above through JSON Lint, it seems to be choking on the space that the TinyMCE editor is placing in my description. There also seems to be an issue with the closing tags. I am getting this error:

Parse error on line 7:
...ets\/", "desc": "This is a test eve
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

Is this an issue of the CMS editor introducing unnecessary spaces?

Is there a better way of creating urls of JSON data using Silverstripe?

Ryan M.

Community Member, 309 Posts

11 September 2011 at 11:11am

It's not the spaces. It's all the backslashes that are there. Do a regexp to strip them before returning the JSON data.


Community Member, 44 Posts

12 September 2011 at 1:31am

Thanks Ryan. I'll give it a try.


Community Member, 44 Posts

12 September 2011 at 3:18am

Turns out the JSON was valid. When I ran the url itself through JSON Lint it returned as Valid.

I did notice that the page ( has a Content-Type of 'text/html'. Maybe this is the source of the parse error. Is there a way to make it so that my Controller method returns a Content-Type of application/json when the page is visited?


Community Member, 288 Posts

12 September 2011 at 4:50am

Yes you can do

$this->getResponse()->addHeader("Content-Type", "application/json; charset=utf-8");