[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: When you ask a webservice in JSON, what do you probably get back ?
Since JSON is *javascript* object notation why would you want to do
anything with it on the i? Just pass it to the browser as a string
and then let javascript handle it like it is supposed to (maybe "eval"
it but that is all you'd need).
I build JSON data all the time (using Java rather than CGIDEV) and I
do that specifically because it works so well with javascript,
otherwise it is rather pointless to create a JSON stream. If you
plan to parse it on the i, why not *send* it to the i in something
more "readable"?
Or is it that some web services only return JSON (haven't run into
that) and you need to manually parse that out?
Pete
[1]hr@xxxxxxxxxxxx wrote:
JSON ;-)
and there is no way to read JSON on an iSeries,
so I'm working on a new method that is able to
convert a recieved JSON object to a XML document
in the CGIDEV2 Responce Object ....
Input:
json = '{'
+ 'data:['
+ '[select:"Y",display:"Y - Yes"]'
+ ' ,[select:"N",display:"N - No"]'
+ ' ] }';
Output:
<tree1 type="object">
<data type="array">
<tree3 type="array">
<select>Y</select>
<display>Y - Yes</display>
</tree3>
<tree3 type="array">
<select>N</select>
<display>N - No</display>
</tree3>
</data>
</tree1>
It's a little bit tricky because JSON comes back
in many formats and not always up to the standards
descibed.
But it can be done in rather few statements, and
here is a first shot that in the end will be packed
into PXAPICGI in a single method like
convertJSONtoXML(addr:length);
buffaddr = bufAddr();
buffsize = bufSize();
// do whatever you like
First shot code:
/free
clearSrvPgm();
setContent('*none');
json = '{'
+ 'data:['
+ '[select:"Y",display:"Y - Yes"]'
+ ' ,[select:"N",display:"N - No"]'
+ ' ] }';
// packed in method
nodeDepth = 1;
nodeLength = 256;
for i = 1 to NodeLength;
cPrev = c;
c = %subst(json:i:1);
if nodeOpen = *off;
select;
when c = *blank;
when c = '"';
when c = '{';
nodeAttr = 'tree'+%char(nodeDepth);
nodeArray(nodeDepth) = nodeAttr;
xmlNode(nodeAttr:'type="object"');
nodeAttr = '';
nodeDepth += 1;
when c = '}';
nodeDepth -= 1;
xmlEndNode();
when c = '[';
nodeAttr = 'tree'+%char(nodeDepth);
nodeArray(nodeDepth) = nodeAttr;
xmlNode(nodeAttr:'type="array"');
nodeAttr = '';
nodeDepth += 1;
when c = ']';
nodeDepth -= 1;
xmlEndNode();
when c = ':';
nodeOpen = *on;
when c = ',';
other;
nodeAttr += c;
endsl;
else;
select;
when nodeOpenC = *on;
select;
when c = '"' and cPrev = '\';
nodeData += c;
when c = '\' and cPrev = '\';
nodeData += c;
when c = '"'
or c = ' ' and nodeOpenB = *on
or c = ',' and nodeOpenB = *on;
xmlNode(nodeAttr:'':nodeData);
nodeAttr = '';
nodeData = '';
nodeOpen = *off;
nodeOpenC = *off;
nodeOpenB = *off;
other;
nodeData += c;
endsl;
when c = *blank;
when c = '"';
nodeOpenC = *on;
// number, true, false, null
when c >= '0' and c <= '9'
or c = '-'
or c = '.'
or c = 't'
or c = 'f'
or c = 'n';
nodeData += c;
nodeOpenC = *on;
nodeOpenB = *on;
when c = '{';
nodeArray(nodeDepth) = nodeAttr;
xmlNode(nodeAttr:'type="object"');
nodeAttr = '';
nodeDepth += 1;
nodeOpen = *off;
when c = '}';
nodeDepth -= 1;
xmlEndNode();
when c = '[';
nodeArray(nodeDepth) = nodeAttr;
xmlNode(nodeAttr:'type="array"');
nodeAttr = '';
nodeDepth += 1;
nodeOpen = *off;
when c = ']';
nodeDepth -= 1;
xmlEndNode();
when c = ':';
when c = ',';
other;
endsl;
endif;
endfor;
// back on the outside again
buffaddr = bufAddr();
buffsize = bufSize();
dsply result;
echoToStmf('/json.xml':1252);
*inlr = *on;
return;
/end-free
_______________________________________________________________________
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubscribe, please go to:
[2]http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------
References
1. mailto:hr@xxxxxxxxxxxx
2. http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------