Jump to:

23007 Posts in 11866 Topics by 2828 members

General Questions

SilverStripe Forums » General Questions » Valid JSON using CMS

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

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

Page: 1
Go to End
Author Topic: 1547 Views
  • tv
    Avatar
    Community Member
    43 Posts

    Valid JSON using CMS Link to this post

    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,
             );   
          
             $i++;
          }
          
          return json_encode($output);
          
       }

    Here's a snippet of the JSON i get when I navigate to mysite.com/events/jsonDates:

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

    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.
    Avatar
    Community Member
    309 Posts

    Re: Valid JSON using CMS Link to this post

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

  • tv
    Avatar
    Community Member
    43 Posts

    Re: Valid JSON using CMS Link to this post

    Thanks Ryan. I'll give it a try.

  • tv
    Avatar
    Community Member
    43 Posts

    Re: Valid JSON using CMS Link to this post

    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 (mysite.com/events/jsonDates) 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?

  • MarcusDalgren
    Avatar
    Community Member
    288 Posts

    Re: Valid JSON using CMS Link to this post

    Yes you can do

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

    1547 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.