Putting Domino's JSON to Use
So, we now know that Domino 7.0.2 includes the ability to output JSON for a view in the same way it's been creating XML for years. But how good is it? Personally I've always found the DXL for ?ReadViewEntries fairly useless due to its odd structure. Well, I'm happy to report that, while the JSON output is a "similar" structure, we can actually use the data as is.
Note that this JSON output isn't supported by Domino 7 and is likely to change format before it ships with Domino 8. Worth bearing in mind if you're thinking of coding with it.
This morning I quickly knocked together a proof of concept page that showed how, using a combination of the data from ?ReadViewEntries and the design from ?ReadDesign it's possible to script a view-like table on a page. The table columns are sized in proportion to the backend view, columns have the correct title and even the alternate row colour is inherited.
You can see the results here.
There are some odd things about the Domino JSON output. For example the array that contains all rows is called viewentry rather than viewentries. Although it's likely to change it's good to know this is going to be a feature and, most importantly, we'll actually be able to use it!
Thanks for the example...would you use this method just as a way of getting a better handle on layout and presentation as compared to a regular view? Or do you have any examples on why developers should use this?
Thanks!
Hmm. Not sure I'd use it to create a table of a view like the example. Not a practical example by any means.
This JSON view stuff is exciting as it makes it much easier to work with AJAX and Domino. We can get view entries from Domino in JSON format *without* messy agents AND we can use extra URL parameters like &Startkey= to really narrow down "search" results.
Lots of other uses to. Such as pagination of views. In conjunction with Jack Slocum's Grid it would be really nice!
Thanks for the usage examples and link!
I actually find the ?readViewEntries stuff interesting for integration.
I have some java code (but this is possible with other languages too) which downloads and parses the ?ReadViewEntries from some forums on notes net with a sax parser and writes all the information in documents of a notes database. It actually also downloads the body of the postings which is admitedly not in the ?ReadViewEntries.
At my job we are using bugzilla. From that system I also get data in xml form. I can again download and parse that data on a scheduled basis and replicate it in a notes database where I can add some extra-functionality like giving people the chance to assign a business value and estimated costs to the bug entries for prioritizing. Thats not ?readViewEntries, but the same idea.
You are the best !!!
grande Jake . :-)
Has anyone put this to use? I'm trying to stuff the json (from an ajax call) and am not having much success. Looking through one of the debugging tools, I see \n in front of the json code:
"{\n"@toplevelentries": 11,\n"@rangeentries": 2,\nviewentry: [\n{\n"@position": '9',\n"@unid": 'CF57E86AE56..."
Any ideas
Mark. \n is a newline in JavaScript. Is it causing your problems?
Yes, it was. I'm not sure who or what was inserting the newline char. I'm a little weak at advanced JS. Here is how I got it to work:
var pos = "";
var myjson = xmlHTTP.responseText ;
otherjson = eval("(" + myjson+ ")");
view["data"]=otherjson ;
var documents= view["data"].viewentry ;
for (var i=0; i<documents.length; i++)
{
alert('in loop: ' )
pos += documents[i].entrydata[1].text[0] ;
}
$("viewtable").innerHTML = pos ;
So, per wikipedia, I ran an eval on what was returned back to me. I then modifed your example to point view["data"] to the eval return, rather than what was returned from Domino. I'm developing in 7.0.2 and FF 1.5.0.9
Any ideas?
BTW, in case your source didn't tell you, they are changing the json outputformat in 8. They are removing the @ from the front of the name since JS doesn't allow @ to be the first character.
So whatever works now may need to be revisited when Domino 8 is installed.
Mark. I see now. My code didn't need the eval() call as all the JSON code was in-line and so already treated as a JavaScript object. Didn't think to mention the eval(), which is needed when the JSON is fetched from Domino as plain text.
@Mark C - there are no plans to remove the @ for version 8.
One of my previous posts described the changes in 8.
FYI, I am a member of the IBM Domino Web Server development team.
To Mark V. I may have misunderstood the Leveraging AJAX Frameworks to Build IBM Lotus Domino Web Applications presentation, but I was pretty sure the speaker mentioned that they were going to remove the @ from the "@position": '1', "@unid": '211F916D90F4425E8625726F0058B298', ... type elements.
I will follow up with the speakers
Hi everyone,
I use JSON responses on Domino 6 but have a problem. Anyone has an idea how to properly include 'charset' or 'codepage' setting in header? Something like Print "Content-Type:text/plain charset:'windows-1250'"?
I need it cause I want to return text with national characters by means of JSON object.
Thanks,
regards from Slovenia,
Bojan
Boyzl. Try:
Print "Content-Type:text/plain; charset:windows-1250"
Note the semicolon and the unquoted charset name!
The output format in release 8.0.2 is still the same, with @. Compared to the JSON of 7, the JSON of 8 now starts with @timestamp, next is @toplevelentries. In 7, it starts with @toplevelentries.