[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 ?



   Henry,
   My i side stuff is written in Java.  In fact all of the web
   application code I have runs in Java Servlets running under Tomcat.  I
   do that because I have customers that run on i and some who,
   inexplicably, run on Windows servers ;-)
   Basically you need to be familiar with Ajax techniques to start with
   because it is Ajax that will call the server (i) side programs that
   will generate the content.  If you are familiar with Ajax, returning
   JSON formatted content is trivial.  If you are not familiar with Ajax,
   then spend some time understanding how it works and write a couple of
   simple routines that make the round trip to the server for data. I am
   sure there are several CGIDEV examples that use Ajax so that you could
   write some RPG code on the i to generate and deliver the data.
   What JSON brings to the table is that the data is already formatted so
   that Javascript will see it as an object.  If you are using a
   framework like jQuery or Dojo or Prototype, working with *objects*
   becomes important and helpful. So JSON complements the so called "Web
   2.0" techniques by delivering ready to use data objects.
   There is a simple and easy to use and understand JSON example I found
   here: [1]http://www.xul.fr/ajax-javascript-json.html#Example  The data
   in this case is is in a file in the same folder as the HTML (you can
   run this demo without any server side code).  But then you *could*
   have your CGIDEV (or whatever i side web application) return the
   contents using an ajax call, rather than loading it locally.  Really
   that would be the only difference.  The JSON formatted data is the
   key, not *where* the data comes from.  But, in the example, you can
   see how easily the data can be used once it has been returned as a
   JSON object.  The menu generating code is pretty trivial.
   I *could* write a servlet to return the JSON data that this example
   gets from the local folder but that would be overkill and probably
   wouldn't help you if you are looking to write the server side code in
   RPG.
   I hope this helps a bit.
   Pete
   Kwong, Henry wrote:

Hi Pete

Can you share with me a sample iseries program to read the JSON
response. Our application is very simple, just passing few input
parameters, and return with the response code and output parameters.
Please help


Henry Kwong | Lead System Analyst
Mattel Global IT - Managed Services
Mattel, Inc. | 333 Continental Blvd. | El Segundo, CA 90245
* 310-252-3205 | *  [2]Henry.Kwong@xxxxxxxxxx




-----Original Message-----
From: [3]ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
[[4]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Pete Helgren
Sent: Wednesday, October 14, 2009 3:58 PM
To: HTTPAPI and FTPAPI Projects
Subject: 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


[5]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:
[6]http://www.scottklement.com/mailman/listinfo/ftpapi
----------------------------------------------------------------------
-




--------------------------------------------------------

This message (including any attachments) is only for the use of the person(s) f
or whom it is intended. It may contain Mattel confidential and/or trade secret
information. If you are not the intended recipient, you should not copy, distri
bute or use this information for any purpose, and you should delete this messag
e and inform the sender immediately.
-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
[7]http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------

References

   1. http://www.xul.fr/ajax-javascript-json.html#Example
   2. mailto:Henry.Kwong@xxxxxxxxxx
   3. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
   4. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
   5. mailto:hr@xxxxxxxxxxxx
   6. http://www.scottklement.com/mailman/listinfo/ftpapi
   7. 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
-----------------------------------------------------------------------