This example is meant to explain how to use the YAJL toolkit from Scott Klement, RPG, and the Apache server to easily create JSON and write it out to standard output. This sort of functionality is nice if you're creating a web service for others to consume.
First, we need to set up an Apache server configuration. This is really simple and would look similar to this:
Listen x.x.x.x:80
CGIConvMode %%EBCDIC/EBCDIC%%
<Directory />
Options None
Order Deny,Allow
Deny From all
</Directory>
<Directory /www/bvsdemo/html>
Order Allow,Deny
Allow From all
<FilesMatch "\.html(\..+)?$">
Options +Includes
SetOutputFilter Includes
</FilesMatch>
</Directory>
ScriptAliasMatch ^/cgi-bin/(.*) /qsys.lib/bvsdemo.lib/$1.pgm
<Directory /qsys.lib/bvsdemo.lib>
allow from all
order allow,deny
Options +ExecCGI +Includes
SetOutputFilter Includes
</Directory>
With this configuration we are basically telling the Apache server to run any program requested to the /cgi-bin directory. The actual library the program is in will be BVSDEMO.
Next, we need the program (caution... full free format following!)
**free
ctl-opt DFTACTGRP(*NO) ACTGRP('BVSDEMO') BNDDIR('YAJL') DECEDIT('0.');
// Imports
/include yajl_h
// Global Definitions
dcl-ds CSTMSTDS extname('CSTMSTPF') end-ds;
// Work Variables
dcl-s yajl_errMsg varchar(500) inz('');
//**********************************************************************
yajl_genOpen(*ON);
yajl_beginObj(); //main JSON object
exsr $Data;
yajl_endObj(); // Main JSON Object
// Write JSON to Standard Output
yajl_writeStdout(200:yajl_errMsg);
if (yajl_errMsg <> '');
// handle error
endif;
yajl_genClose();
*inlr = *on;
//***************************************************************
//* Build JSON
//***************************************************************
begsr $Data;
exec SQL declare C1 cursor for
select email, bname, name, add1, add2,
city, state, zip
from CSTMSTPF;
exec SQL open C1;
exec SQL fetch next from C1 into
:email, :bname, :name, :add1, :add2,
:city, :state, :zip;
yajl_beginArray('customerList');
dow (sqlCode = 0);
yajl_beginObj(); //Customer Object
yajl_addChar('email':%trimr(email));
yajl_addChar('bname':%trimr(bname));
yajl_addChar('name':%trimr(name));
yajl_addChar('add1':%trimr(add1));
yajl_addChar('add2':%trimr(add2));
yajl_addChar('city':%trim(city));
yajl_addChar('state':%trimr(state));
yajl_addChar('zip':%trimr(zip));
yajl_endObj(); //Customer Object
exec SQL fetch next from C1 into
:email, :bname, :name, :add1, :add2,
:city, :state, :zip;
enddo;
exec SQL close C1;
yajl_endArray(); //customerList
endsr;
As show by this program, we simply build the JSON using YAJL and then use the yajl_WritestdOut() function to output that JSON to the browser.
An example of this exact program can be seen here by clicking here.
Related Articles: