Learn More





DNN Community Blog

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

4-Ways to Work with JSON Data Using StruXured Content (2sxc)

Many cool visualizations run in JavaScript, so your scripts must be able to get the content-items as JSON. Here are the 4 most important ways to do it.

1. Publish a Visual Query for Your Template Only

You can easily create a query against your SQL, CSV, XML or whatever. You can even determine parameters like "category" to come from a URL. All this is documented on the Visual-Query introduction. By default, this is assigned to a server-side template, but it's easy to open up to provide JSON. Here's how:

  1. Go to query admin > permissions > create new:
  2. In the resulting dialog, aside from a nice name you want to specify read-permissions for people with view-rights. You probably want to limit it to "View" and not to "Anonymous". The difference is that View means that the JavaScript query is actually coming from a valid DNN module (which has permissions) and not from an anonymous source in the internet. 

Now that it's published, your JS can easily access it through a few lines of code. 

  • jQuery in DNN uses the $2sxc helper - read more in the API wiki
  • AngularJS with 2sxc4ng: sxc.query("All").then(function(result) { your code } );

2. Publish a Visual Query for AJAX Requests from Other Sites

This is the same procedure as above, with the difference that you'll want to to allow anonymous access.  

Since you will probably access this query from external, you will be missing both a DNN-context (incl. the JS Services-Framework) and a Module-context. This means there will be no HTTP headers telling the query what module this is for. So you'll have to use your own JS libraries like jQuery.ajax or AngularJS $http. The API address will be


3. Publish the Module-Instance-Data as JSON

There are various use cases where a query doesn't match your need, because you need to get just the items which an editor added to a module using template/content paradigm. 

  • A common example is an image-slider, which of course only wants to get the slide-items assigned to the current module, in the correct order. 
  • Another common example is a template which may do some data-pre-processing in your init-code, resulting in different items than can be filtered using a visual query.

To do this, you must:

  1. enable data-publishing on the template settings
  2. tell the data-publisher which streams shall be available on JSON (to protect from accidentally serving too much data or secret data.

To then access this data from the module itself, you need the $2sxc object again, and will get a javascript event returning the data. 

4. Create your own WebAPI for your Templates

Maybe you want more control over what is streamed, about the type of query you want to run or just want to do something which isn't available out of the box. You can just create your own WebAPI for this. The quick basics:

  1. add a folder called api to your app-folder
  2. create some SomethingController.cs files according to WebAPI conventions
  3. implement your api
  4. use the $2sxc(...).webApi.get(...) in JavaScript to talk with your API

More documentation in the WebAPI docs or the $2sxc docs for the JavaScript side.  


So you have at least 4 ways to solve just about any kind of JSON need you have, from the quick-and-effective to full-total-control. 

Love from Switzerland,

Daniel Mettler grew up in the jungles of Indonesia and is founder and CEO of 2sic internet solutions in Switzerland and Liechtenstein, an 20-head web specialist with over 800 DNN projects since 1999. He is also chief architect of 2sxc (see forge), an open source module for creating attractive content and DNN Apps.

Read more posts by Daniel Mettler


There are currently no comments, be the first to post one.

Comment Form

Only registered users may post comments.


2sic Daniel Mettler (124)
Aderson Oliveira (15)
Alec Whittington (11)
Alex Shirley (10)
Andrew Nurse (30)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (22)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (203)
Chris Paterra (55)
Clinton Patterson (28)
Cuong Dang (21)
Daniel Bartholomew (2)
Dave Buckner (2)
David Poindexter (3)
David Rodriguez (2)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (74)
Geoff Barlow (6)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (270)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matthias Schlomann (15)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Mike Horton (19)
Mitchel Sellers (28)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Peter Donker (52)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott S (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (2)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (37)
Will Strohl (163)
William Severance (5)
Try Evoq
For Free
Start Free Trial
a Demo
See Evoq Live
Need More Information?