SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
© 2010 Marty Hall




         Automatically
      Generating JSON from
          Java Objects
          Originals of Slides and Source Code for Examples:
      http://courses.coreservlets.com/Course Materials/ajax.html
      http://courses.coreservlets.com/Course-Materials/ajax.html
                Customized Java EE Training: http://courses.coreservlets.com/
   Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6.
  Developed and taught by well-known author and developer. At public venues or onsite at your location.




                                                                                                              © 2010 Marty Hall




 For live Ajax & GWT training, see training
courses at http://courses.coreservlets.com/.
          t htt //                l t       /
       Taught by the author of Core Servlets and JSP,
     More Servlets and JSP and this tutorial. Available at
                       JSP,          tutorial
     public venues, or customized versions can be held
                on-site at your organization.
  •C
   Courses d
           developed and t
               l   d d taught b M t H ll
                           ht by Marty Hall
        – Java 6, servlets/JSP (intermediate and advanced), Struts, JSF 1.x, JSF 2.0, Ajax, GWT 2.0 (with GXT), custom mix of topics
        – Ajax courses can concentrate on 1EE Training: http://courses.coreservlets.com/ or survey several
                 Customized Java library (jQuery, Prototype/Scriptaculous, Ext-JS, Dojo, Google Closure)
  • Courses developed and taught by coreservlets.com experts (edited by Marty)
   Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6.
       – Spring, Hibernate/JPA, EJB3, Web Services, Ruby/Rails
  Developed and taught by well-known author and developer. At public venues or onsite at your location.
                                     Contact hall@coreservlets.com for details
Topics in This Section
    • Using org.json Java utilities
      –   Building JSON object from bean
      –   Building JSON array from Java array or List
      –   Building JSON object from Map
      –   Other JSON-generation utilities
    • Using json2.js JavaScript utilities
      – Sending JSON objects to server




4




                                                                                                 © 2010 Marty Hall




                         Intro and Setup

                        Customized Java EE Training: http://courses.coreservlets.com/
            Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6.
           Developed and taught by well-known author and developer. At public venues or onsite at your location.
Using MVC to Build JSON
    • Last section: used MVC to build JSON
      – Advantages
         • Requires no special server software
         • You have full control over result
      – Disadvantages
         • Tedious for complex data structures
         • Oft requires knowledge of how server will use data
           Often     i   k    l d     fh         ill     d t
    • This section: turning Java into JSON
      – Advantages
         • Can generate complex data easily
         • Builds real objects so server can decide what to do
      – Di d
        Disadvantages
         • Requires JSON-specific server software
6        • Sometimes builds objects with unneeded data in them




    Installing the org.json.* Utilities
    • Download
      – http://www.json.org/java/json.zip
         • Or start at http://www.json.org/java/ and follow link that
           says “Free source code is available”.
             y
    • Install
      – Unzip to get org/json/*.java
      – Put into src folder of Eclipse
         • Create new package org.json, then copy files there
      – They do not supply a JAR file but you could easily build
                                  file,
        one yourself, then put JAR file in WEB-INF/lib
         • Built org.json-utils.jar and put online at coreservlets.com
    • Documentation
      – http://www.json.org/java/
7
Configuring Eclipse Project



                                   Used only in last example. Available for download at
                                   http://www.json.org/json2.js. You can also get compressed
                                   version; see http://www.json.org/js.html.




                                        Used in all examples. Available for download at
                                        http://courses.coreservlets.com/Course-Materials/ajax.html
                                        http://courses coreservlets com/Course-Materials/ajax html
                                        Downloaded latest .java files from http://www.json.org/java/,
                                        compiled, and put resultant .class files in JAR file. Or, you can put
                                        .java files from http://www.json.org/java/ directly in src/org.json.
8




    Other JSON-Generation
    Software
    • org.json utilities (used in this tutorial)
      – Wid l used
        Widely   d
         • Used within other utilities (e.g., JSON-RPC)
      – Limited power
    • Alt
      Alternatives
             ti
      – Google Gson
         • Better support for generics
         • htt // d
           http://code.google.com/p/google-gson/
                            l     / /   l      /
      – JSON Taglib
         • More usable directly from JSP
         • http://json taglib sourceforge net/
           http://json-taglib.sourceforge.net/
      – VRaptor
         • Uses annotations for much of the work
         • http://vraptor org/ajax html
           http://vraptor.org/ajax.html
      – Many more
         • See “Java” entry at http://json.org/
9
© 2010 Marty Hall




         Supporting Java Code
                    (Used in All Examples)


                       Customized Java EE Training: http://courses.coreservlets.com/
           Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6.
          Developed and taught by well-known author and developer. At public venues or onsite at your location.




     Main Bean: City.java
     • Constructor
        public City(String name, int timeZone, int pop) {
          setName(name);
          setTimeZone(timeZone);
          setPop(pop);
        }

     • Getter methods
       – getName
       – getTime, getTimeZone
          • Assumes server is in US east coasts subtracts 0-3 hours
                                         coasts,          03
            based on time zone
       – getPop
          • Raw population as an int
       – getPopulation
11        • Formatted population as a String with commas
Utilities for Finding Beans:
     CityUtils.java
     CityUtils java
     • Map that associates city name with City
        private static Map<String,City> biggestAmericanCities =
          new HashMap<String,City>();

          • Populate it with largest US cities

     • L k
       Lookup f
              functions
                  ti
        public static City getCity(String name) {
          name = name.toUpperCase();
          return(biggestAmericanCities.get(name));
        }



12




     Utilities for Finding Beans:
     CityUtils.java
     CityUtils java Continued
     • Map that associates category of cities with
       city names
        i
       private static Map<String,String[]> cityTypeMap;


     • Lookup function
         public static List<City> findCities(String cityType) {
           String[] cityNames = cityTypeMap get(cityType);
                                cityTypeMap.get(cityType);
           if (cityNames == null) {
             String[] twoCities = { "New York", "Los Angeles" };
             cityNames = twoCities;
           }
           List<City> cities = new ArrayList<City>();
           for(String cityName: cityNames) {
             cities.add(getCity(cityName));
             cities add(getCity(cityName));
           }
           return(cities);
13       }
Parent Servlet Class:
         ShowCities.java
         ShowCities java
     public abstract class ShowCities extends HttpServlet {
       public void doGet(HttpServletRequest request,
                         HttpServletResponse response)
           throws ServletException, IOException {
         response.setHeader("Cache-Control", "no-cache");
         response.setHeader("Pragma", "no-cache");
         response.setContentType("text/javascript");
         List<City> cities = getCities(request);
         outputCities(cities, request, response);
       }

          protected List<City> getCities(HttpServletRequest request) {
            String cityType = request.getParameter("cityType");
            return(CityUtils.findCities(cityType));
          }



14




         Parent Servlet Class:
         ShowCities.java
         ShowCities java Continued
         public void doPost(HttpServletRequest request,
                             HttpServletResponse response)
              throws ServletException, IOException {
            doGet(request, response);
          }

          public abstract void outputCities
                                     (List<City> cities,
                                      HttpServletRequest request,
                                      HttpServletResponse response)
              throws ServletException, IOException;
     }




15
© 2010 Marty Hall




                  General Approach

                       Customized Java EE Training: http://courses.coreservlets.com/
           Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6.
          Developed and taught by well-known author and developer. At public venues or onsite at your location.




     Steps for Servlet Using JSON
     Utilities
     • Set normal response headers
       – response.setHeader f P
                    tH d for Pragma and C h C t l
                                      d Cache-Control
     • Set Content-Type to text/javascript
       – response.setContentType("text/javascript");
     • Get PrintWriter in normal manner
       – PrintWriter out = response.getWriter
     • Get result as bean array or Map
                     bean, array,
       – Call normal business logic code
     • Turn Java object into JSONObject
       – JSONObject result = new JSONObject(bean);
       – JSONArray result = new JSONArray(arrayOfBeans, false);
       – JSONObject result = new JSONObject(map);
                j                      j ( p)
     • Output JSONObject with print
       – out.print(result);
17
Steps for Using JSON Utilities:
      Sample Servlet Code
     public void doPost(HttpServletRequest request,
                        HttpServletResponse response)
         throws ServletException, IOException {
       response.setHeader("Cache-Control", "no-cache");
       response.setHeader("Pragma", "no-cache");
       response.setContentType("text/javascript");
       PrintWriter out = response.getWriter();
       SomeBean javaResult = callSomeBusinessLogic(…);
       JSONObject jsonResult = new JSONObject(javaResult);
           p    (j         );
       out.print(jsonResult);
     }

                                                 These two lines are the only ones that typically change
                                                 from application t application. Oth li
                                                 f       li ti to       li ti Other lines stay exactly as iis.
                                                                                             t        tl



18




                                                                                                     © 2010 Marty Hall




              Turning Java Beans
                            j
               into JSONObject

                       Customized Java EE Training: http://courses.coreservlets.com/
           Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6.
          Developed and taught by well-known author and developer. At public venues or onsite at your location.
Turning Beans into JSON
     • org.json defines JSONObject
       – I toString method builds JSON f
         Its S i       h d b ild       format
     • Most important constructor takes a bean
       – JSONObject json = new JSONObject(myBean);
          • Second arg of “true” means to include superclass info
       – Result
          • Uses reflection on myBean to find all public methods of the
            form getBlah (any return type) or isBlah (boolean return)
          • Calls each getter method
          • If myBean has getFoo and getBar, it builds object of the
            form { "foo": "getFoo() result", "bar": "getBar() result"}
     • Other capabilities
       – Can turn Map into JSONObject (keys become properties)
       – Can add properties one at a time with “put”
20




     JSONObject from Bean:
     Example Code
     package coreservlets;

     import org.json.*;

     public class CityTest1 {
       public static void main(String[] args) {
         City sf = CityUtils.getCity("San Francisco");
         JSONObject fJSON
         JSONObj t sfJSON = new JSONObj t( f)
                                 JSONObject(sf);
         System.out.println("JSON version of SF is:n" +
                            sfJSON);
       }
     }

                                 Note: toString is automatically called when you print an
                                 Object in Java. It is the toString method of JSONObject that
                                 builds the JSON representation.

21
JSONObject from Bean:
     Example Result
     JSON version of SF is:
     {"time":       "06:00:55 AM"
                              AM",
      "name":       "San Francisco",
      "timeZone":   -3,
      "pop":        744041,
      "population": " 744,041"}


     • (White space added for readability)




22




     Building Arrays of JSON Info
     • org.json defines JSONArray
       – Its toString method outputs array in JSON format
     • Most important constructors
       – new JSONA
             JSONArray(javaArrayOrCollection)
                      (j A      O C ll i )
          • Assumes javaArrayOrCollection contains primitives,
            Strings, or JSONObjects
       – new JSONArray(javaArrayOrCollection, false)
          • Assumes javaArrayOrCollection contains beans that
            should be converted as in previous section, but you don’t
                                      p               ,     y
            want to include superclass info
       – new JSONArray(javaArrayOrCollection, true)
          • Assumes javaArrayOrCollection contains beans that
            should be converted as in previous section, but you do
            want to include superclass info
23
JSONArray: Example Code
     package coreservlets;

     import org.json.*;
     import java.util.*;

     public class CityTest2 {
       public static void main(String[] args) {
         List<City> biggestUSCities =
           CityUtils.findCities("top-5-cities");
         JSONArray citiesJSON =
           new JSONArray(biggestUSCities, false);
            e JSO     ay(b ggestUSC t es, a se);
         System.out.println("JSON version of biggest " +
                            "US cities is:n" +
                                      );
                            citiesJSON);
       }
     }
24




      JSONArray: Example Result
     JSON version of biggest US cities is:
     [{"time":"09:14:16 AM" "name":"New York"
                        AM",             York",
       "timeZone":0,"pop":8250567,"population":"8,250,567"},
      {"time":"06:14:16 AM", "name":"Los Angeles",
       "timeZone":-3,"pop":3849368,"population":"3,849,368"},
       "timeZone": 3 "pop":3849368 "population":"3 849 368"}
      {"time":"08:14:16 AM", "name":"Chicago",
       "timeZone":-1,"pop":2873326,"population":"2,873,326"},
      {"time":"08:14:16 AM", "
      {"ti " "08 14 16 AM" "name":"Houston",
                                  " "H   t "
       "timeZone":-1,"pop":2144491,"population":"2,144,491"},
      {"time":"07:14:16 AM", "name":"Phoenix",
       "timeZone":-2,"pop":1512986,"population":"1,512,986"}]
       "ti Z    " 2 "    " 1512986 "    l ti " "1 512 986"}]


     • (White space added for readability)

25
© 2010 Marty Hall




          Comparing M
          C      i  Manual and
                          l d
        Automatic JSON Generation

                        Customized Java EE Training: http://courses.coreservlets.com/
            Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6.
26         Developed and taught by well-known author and developer. At public venues or onsite at your location.




      Manual Generation: Server Code
      (Servlet)
     public class ShowCities1 extends ShowCities {
       public void outputCities(List<City> cities
                                           cities,
                                HttpServletRequest request,
                                HttpServletResponse response)
           throws ServletException IOException {
                  ServletException,
         request.setAttribute("cities", cities);
         String outputPage =
           "/WEB-INF/results/cities-json.jsp";
           "/WEB INF/    lt / iti   j    j "
         RequestDispatcher dispatcher =
           request.getRequestDispatcher(outputPage);
         dispatcher.include(request, response);
         di   t h   i l d (       t          )
       }
     }



27
Manual Generation: Server Code
      (JSP)
     { headings: ["City", "Time", "Population"],
       cities: [["${cities[0] name}" "${cities[0] time}"
               [["${cities[0].name}", "${cities[0].time}",
                 "${cities[0].population}"],
                ["${cities[1].name}", "${cities[1].time}",
                 "${cities[1].population}"],
                ["${cities[2].name}", "${cities[2].time}",
                 "${cities[2].population}"],
                ["${cities[3].name}", "${cities[3].time}",
                 "${cities[3].population}"],
                [ ${
                ["${cities[4].name}", "${cities[4].time}",
                          [ ]     } , ${       [ ]     } ,
                 "${cities[4].population}"]]
     }



28




      Manual Generation: Client Code
     function cityTable1(address, inputField, resultRegion) {
       var data = "cityType=" + getValue(inputField);
       ajaxPost(address, data,
                function(request) {
                  showCityInfo1(request,
                  showCityInfo1(request resultRegion);
                });
     }


     • Note:
        – ajaxPost shown in previous tutorial section
           • Sends data via POST and passes result to handler
             function



29
Manual Generation: Client Code
      (Continued)
     // Data that arrives is JSON object with two properties:
     // - headings (an array of strings for the th elements)
     // - cities (an array of array of strings
     //            matching the heading names)

     function showCityInfo1(request, resultRegion) {
       if ((request.readyState == 4) &&
           (request.status == 200)) {
           (      t t t
         var rawData = request.responseText;
         var data = eval("(" + rawData + ")");
         var t bl = getTable(data.headings, d t
             table     tT bl (d t h di       data.cities);
                                                   iti )
         htmlInsert(resultRegion, table);
       }
     }


30




      Manual Generation: HTML Code
     <fieldset>
       <legend>JSON Data: Original MVC Approach</legend>
          g                   g          pp      / g
       <form action="#">
        <label for="city-type-1">City Type:</label>
        <select id="city-type-1">
          <option value="top-5-cities">Largest Five US Cities</option>
                                                               /
          <option value="second-5-cities">Second Five US Cities</option>
          …
          /se ect
         </select>
        <br/>
        <input type="button" value="Show Cities"
                onclick='cityTable1("show-cities-1", "city-type-1",
                                    "json-city-table-1")'/>
                                                         /
       </form>
       <p/>
       <div id="json-city-table-1"></div>
            id json city table 1 ></div>
     </fieldset>


31
Manual Generation: Results




32




     Manual Generation:
     Pros and Cons
     • Advantages
       – Requires no JSON-specific software on server
       – Java code is moderately simple
       – Client code is simple
     • Disadvantages
       – JSP code is complex
       – JSP code cannot adapt to arbitrary number of cities
          • This can be fixed with JSTL – see next tutorial section
       – Server code needs to know a lot about how client code
         will use results. Server code essentially pre-processed the
         data and put it in form ready for p
                   p                 y     presentation.
          • If you are going to do that, why bother with data-centric
            Ajax? Why not just send HTML table from the server?
33
Automatic Generation: Server
      Code (Servlet)
     public class ShowCities2 extends ShowCities {
       public void outputCities(List<City> cities
                                           cities,
                                HttpServletRequest request,
                                HttpServletResponse response)
           throws ServletException IOException {
                  ServletException,
         PrintWriter out = response.getWriter();
         out.println(new JSONArray(cities, false));
       }
     }




34




      Automatic Generation: Server
      Code (JSP)
     • None!




35
Automatic Generation: Client
      Code
     function cityTable2(address, inputField, resultRegion) {
       var data = "cityType=" + getValue(inputField);
       ajaxPost(address, data,
                function(request) {
                  showCityInfo2(request,
                  showCityInfo2(request resultRegion);
                });
     }


     • Note:
        – Only difference from previous example is that result is
          passed to showCityInfo2 instead of ShowCityInfo1



36




      Automatic Generation: Client
      Code (Continued)
     // Data that arrives is an array of city objects.
     // City objects contain (among other things)
     // name, time, and population properties.

     function showCityInfo2(request, resultRegion) {
       if ((request.readyState == 4) &&
           (request.status == 200)) {
         var rawData = request.responseText;
         var cities = eval("(" + rawData + ")");
                      eval( (               ) );
         var headings = ["City", "Time", "Population"];
         var rows = new Array();
         for(var i=0; i<cities.length; i++) {
           var city = cities[i];
           rows[i] = [city.name, city.time, city.population];
         }
         var t bl = getTable(headings, rows);
             table     tT bl (h di          )
         htmlInsert(resultRegion, table);
       }
37
     }
Automatic Generation:
      HTML Code
     <fieldset>
       <legend>JSON Data: Automatic Conversion of Lists</legend>
          g                                              / g
       <form action="#">
        <label for="city-type-2">City Type:</label>
        <select id="city-type-2">
          <option value="top-5-cities">Largest Five US Cities</option>
                                                               /
          <option value="second-5-cities">Second Five US Cities</option>
          …
          /se ect
         </select>
        <br/>
        <input type="button" value="Show Cities"
                onclick='cityTable2("show-cities-2", "city-type-2",
                                    "json-city-table-2")'/>
                                                         /
       </form>
       <p/>
       <div id="json-city-table-2"></div>
            id json city table 2 ></div>
     </fieldset>


38




      Automatic Generation: Results




39
Automatic Generation:
     Pros and Cons
     • Advantages
       – Java code i very simple
         J       d is       i l
       – No JSP whatsoever
       – Server code can adapt to arbitrary number of cities
                             p            y
       – Server code does not need to know how client code will
         use the result
       – Client code has “real” data so can do logic based on it
                          real
     • Disadvantages
       – Requires JSON-specific software on server
       – Client code is more complex
           • It needs to extract data from objects before sending it to
             table-building function
       – Extra fields were sent
           • Client did not use timeZone and pop properties, but they
40
             were sent anyway




                                                                                                 © 2010 Marty Hall




                  Turning Java Maps
                   into JSONObject
                               j

                        Customized Java EE Training: http://courses.coreservlets.com/
            Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6.
           Developed and taught by well-known author and developer. At public venues or onsite at your location.
Building JSONObject from Map
     • Most important JSONObject constructors
       – new JSONObject(bean)
          • Uses reflection on myBean to find all public methods of the
            form getBlah (any return type) or isBlah (boolean return)
                 g         ( y         yp )             (              )
          • Calls each getter method
          • If myBean has getFoo and getBar, it builds object of the
            form { "foo": "getFoo() result , "bar": "getBar() result }
                    foo : getFoo() result", bar : getBar() result"}
       – new JSONObject(bean, true)
          • Same as above but includes inherited methods
     • Oth constructors
       Other   t   t
       – new JSONObject(map)
          • Map keys become JSON property names
       – new JSONObject(string)
42
          • Useful when passing JSON to the server




     JSONObject from Map:
     Example Code
     package coreservlets;

     import org.json.*;
     import java.util.*;

     public class CityTest3 {
       public static void main(String[] args) {
         Map<String,String[]> cities =
         M <St i    St i []> iti
           CityUtils.getCityTypeMap();
         JSONObject citiesJSON =
           new JSONObject(cities);
                         (       )
         System.out.println("JSON version of map of " +
                            "US cities is:n" +
                            citiesJSON);
       }
43   }
JSONObject from Map:
      Example Result
     JSON version of map of US cities is:
     { superbowl hosts :
     {"superbowl-hosts":
       ["Phoenix","Miami",
        "Detroit","Jacksonville","Houston"],
       top 5 cities :
      "top-5-cities":
        ["New York","Los Angeles",
         "Chicago","Houston","Phoenix"],
       cities starting with s :
      "cities-starting-with-s":
        ["San Antonio","San Diego",
         "San Jose","San Francisco","Seattle"],
       seco d 5 c t es :
      "second-5-cities":
        ["Philadelphia","San Antonio",
         "San Diego","Dallas","San Jose"]}


     • (White space added for readability)
44




      Converting Maps: Server Code
     public class ShowCityTypes extends HttpServlet {
       public void doGet(HttpServletRequest request
                                            request,
                         HttpServletResponse response)
           throws ServletException, IOException {
         response.setHeader( Cache Control
         response setHeader("Cache-Control", "no-cache");
                                              no cache );
         response.setHeader("Pragma", "no-cache");
         response.setContentType("text/javascript");
         PrintWriter out = response.getWriter();
         JSONObject cityTypes =
           new JSONObject(CityUtils.getCityTypeMap());
         out.p
         out.println(cityTypes);
                 t (c ty ypes);
       }




45
Converting Maps: Server Code
         (Continued)
         public void doPost(HttpServletRequest request
                                               request,
                            HttpServletResponse response)
             throws ServletException, IOException {
           doGet(request,
           doGet(request response);
         }
     }




46




         Converting Maps: Client Code
     function cityTypeList(address, resultRegion) {
       ajaxPost(address, null,
       ajaxPost(address null
                function(request) {
                  showCityTypeInfo(request, resultRegion);
                });
     }


     // Data that arrives is an object where the
     // properties are city categories and the
     // assoc ated values a e a ays o c ty names.
        associated a ues are arrays of city a es.




47
Converting Maps: Client Code
      (Continued)
     function showCityTypeInfo(request, resultRegion) {
       if ((request.readyState == 4) &&
          (request.status == 200)) {
         var rawData = request.responseText;
         var cityTypes = eval("(" + rawData + ")");
         var headings = new Array();
                                           Object property names are city
         var row1Entries = new Array();    categories like “top-5-cities”
         var i = 0;
         for(var cityType in cityTypes) {
           headings[i] = cityType;
           row1Entries[i] = getBulletedList(cityTypes[cityType]);
           i++;
         }
         var rows = [row1Entries];
         var result = getTable(headings, rows);                Object property values are
                                                               arrays of city names (
                                                                   y        y       (cities
         htmlInsert(resultRegion, result);
         ht lI    t(    ltR i         lt)                      that match the category)
       }
     }
48




      Converting Maps: Client Code
      (Continued)
     function getBulletedList(listItems) {
       var list = "<ul>n";
       for(var i=0; i<listItems.length; i++) {
         list = list + " <li>" + listItems[i] + "</li>n";
       }
       list = list + "</ul>"
       return(list);
     }




49
Converting Maps:
      HTML Code
     <fieldset>
       <legend>JSON Data: Automatic Conversion of Maps</legend>
       <form action="#">
        <input type="button" value="Show City Types"
               onclick cityTypeList( show city types ,
               onclick='cityTypeList("show-city-types",
                                     "city-types")'/>
       </form>
       <p/>
        p/
       <div id="city-types"></div>
     </fieldset>




50




      Converting Maps: Results




51
© 2010 Marty Hall




             Sending JSON Data
            from Client to Server

                       Customized Java EE Training: http://courses.coreservlets.com/
           Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6.
          Developed and taught by well-known author and developer. At public venues or onsite at your location.




     Using JSON.stringify
     • Download json2.js
       – h //
         http://www.json.org/json2.js
                       j       /j 2 j
       – Or, start at http://www.json.org/js.html and follow links
         at bottom of page
     • Install in your project
       – E.g., in Eclipse, drop in WebContent/scripts
       – Load json2.js in your HTML file
                json2 js
     • Call JSON.stringify on JavaScript object
       – Produces string in JSON format representing object
                       g                  p        g j
     • Call escape on result
       – URL-encode characters for transmission via HTTP
     • S d in POST to client
       Send i      t li t
       – Data might be large, so POST is better than GET
53
Utility Function

     function makeJsonString(object) {
       return(escape(JSON.stringify(object)));
     }




54




     Receiving JSON Objects on
     Server
     • Pass string to JSONObject or JSONArray
       constructor
       – String jsonString = request.getParameter(…);
       – JSONArray myArray = new JSONArray(jsonString);
     • Access elements with getBlah methods
       – Primitives
          • getInt, getDouble, getString, getBoolean, isNull
          • double d = myArray.getDouble(0);
             – S
               Server needs t know the types that will b sent f
                         d to k    th t      th t ill be    t from client
                                                                    li t
       – High-level
          • getJSONObject, getJSONArray


55
Sending JSON to Server:
      Client Code
     function randomCityTable(address, resultRegion) {
       var data = "cityNames=" +
                    cityNames=
                  makeJsonString(getRandomCities());
       ajaxPost(address, data,
                function(request) {
                  showCityInfo2(request, resultRegion);
                });
     }

                             This is the same showCityInfo2 function used earlier.
                             Takes an array of city objects and makes HTML table
                             from their names, times, and populations.




56




      Sending JSON to Server:
      Client Code (Continued)
     var cityNames =
       [ New York , Los Angeles", Chicago , Houston ,
       ["New York", "Los Angeles , "Chicago", "Houston",
        "Phoenix", "Philadelphia", "San Antonio", "San Diego",
        "Dallas", "San Jose", "Detroit", "Jacksonville",
        "Indianapolis", "San Francisco", "Columbus", "Austin",
                p     ,                ,           ,         ,
        "Memphis", "Fort Worth", "Baltimore", "Charlotte",
        "El Paso", "Milwaukeee", "Boston", "Seattle",
        "Washington DC", "Denver", "Louisville", "Las Vegas",
        "Nashville", "Oklahoma City", "Miami"];




57
Sending JSON to Server:
      Client Code (Continued)
     function getRandomCities() {
       var randomCities = new Array();
       var j = 0;
       for(var i=0; i<cityNames.length; i++) {
         if(Math.random() < 0.25) {
           (           ()       )
           randomCities[j++] = cityNames[i];
         }
       }
       return(randomCities);
     }




58




      Sending JSON to Server:
      HTML Code
     <script src="./scripts/ajax-utils.js"
             type text/javascript ></script>
             type="text/javascript"></script>
     <script src="./scripts/json-generation-examples.js"
             type="text/javascript"></script>
     <script src="./scripts/json2.js"
          p             p   j     j
             type="text/javascript"></script>
     …
     <fieldset>
       <legend>JSON Data: Sending JSON <i>to</i>
       Server</legend>
       <form action="#">
        <input type="button" value="Show Random Cities"
               onclick='randomCityTable("show-cities-3",
                                        "json-city-table-3")'/>
       </form>
       <p/>
       <div id="json-city-table-3"></div>
59   </fieldset>
Sending JSON to Server:
      Server Code
     public class ShowCities3 extends ShowCities {
       p
       protected List<City> getCities(HttpServletRequest request) {
                         y g         (    p        q       q    )
         String cityNames = request.getParameter("cityNames");
         if ((cityNames == null) || (cityNames.trim().equals(""))) {
           cityNames = "['New York', 'Los Angeles]";
         }
         try {
           JSONArray jsonCityNames = new JSONArray(cityNames);
           List<City> c t es = new ArrayList<City>();
             st C ty cities     e      ay st C ty ();
           for(int i=0; i<jsonCityNames.length(); i++) {
             City city =
               CityUtils.getCityOrDefault(jsonCityNames.getString(i));
             cities.add(city);
           }
           return(cities);
         } catch(JSONException jse) {
           return(CityUtils.findCities("top-5-cities"));
         }
60
       }




      Sending JSON to Server:
      Results




61
© 2010 Marty Hall




                                       Wrap-up

                       Customized Java EE Training: http://courses.coreservlets.com/
           Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6.
          Developed and taught by well-known author and developer. At public venues or onsite at your location.




     Preview of Next Section:
     JSON-RPC
     • Simpler designation of server-side resource
       – Client-side code acts as if it is calling a server-side
         function (not a URL)
     • Simpler client side code
               client-side
       – Client-side code passes and receives regular arguments
          • Passing: no need to escape data or build param strings
                  g                 p                p          g
          • Receiving: no need to use responseText or eval
     • Simpler server-side code
       –S
        Server-side code receives and returns regular arguments
                id    d      i      d             l
          • Receiving: no need to call request.getParamter & convert
          • Returning: results automatically converted with
            JSONObject and JSONArray

63
Summary
     • Building JSON from Java
       – new JSONObject(bean)
       – new JSONArray(arrayOrCollectionOfBeans, false)
       – new JSONObject(map)
     • Outputting JSON String
       – myJSONObject toString() myJSONArray toString()
         myJSONObject.toString(), myJSONArray.toString()
          • When you do out.print, toString is invoked automatically
     • Sending JSON to server
       – escape(JSON.stringify(javaScriptObject))
     • Receiving JSON on server
       – new JSONObject(string) or new JSONArray(string)
       – myArray.getString(i), myArray.getDouble(i), etc.
64




                                                                                                © 2010 Marty Hall




                                 Questions?

                       Customized Java EE Training: http://courses.coreservlets.com/
           Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6.
          Developed and taught by well-known author and developer. At public venues or onsite at your location.

Weitere ähnliche Inhalte

Was ist angesagt?

ElasticSearch for .NET Developers
ElasticSearch for .NET DevelopersElasticSearch for .NET Developers
ElasticSearch for .NET DevelopersBen van Mol
 
Basics of JSON (JavaScript Object Notation) with examples
Basics of JSON (JavaScript Object Notation) with examplesBasics of JSON (JavaScript Object Notation) with examples
Basics of JSON (JavaScript Object Notation) with examplesSanjeev Kumar Jaiswal
 
JSLT: JSON querying and transformation
JSLT: JSON querying and transformationJSLT: JSON querying and transformation
JSLT: JSON querying and transformationLars Marius Garshol
 
JavaScript - From Birth To Closure
JavaScript - From Birth To ClosureJavaScript - From Birth To Closure
JavaScript - From Birth To ClosureRobert Nyman
 
JSON-(JavaScript Object Notation)
JSON-(JavaScript Object Notation)JSON-(JavaScript Object Notation)
JSON-(JavaScript Object Notation)Skillwise Group
 
5 Tips for Better JavaScript
5 Tips for Better JavaScript5 Tips for Better JavaScript
5 Tips for Better JavaScriptTodd Anglin
 
Json - ideal for data interchange
Json - ideal for data interchangeJson - ideal for data interchange
Json - ideal for data interchangeChristoph Santschi
 
Java Development with MongoDB
Java Development with MongoDBJava Development with MongoDB
Java Development with MongoDBScott Hernandez
 
Data collection in AWS at Schibsted
Data collection in AWS at SchibstedData collection in AWS at Schibsted
Data collection in AWS at SchibstedLars Marius Garshol
 
Elasticsearch And Ruby [RuPy2012]
Elasticsearch And Ruby [RuPy2012]Elasticsearch And Ruby [RuPy2012]
Elasticsearch And Ruby [RuPy2012]Karel Minarik
 
Reactive Access to MongoDB from Scala
Reactive Access to MongoDB from ScalaReactive Access to MongoDB from Scala
Reactive Access to MongoDB from ScalaHermann Hueck
 
Elasticsearch (Rubyshift 2013)
Elasticsearch (Rubyshift 2013)Elasticsearch (Rubyshift 2013)
Elasticsearch (Rubyshift 2013)Karel Minarik
 
A Re-Introduction to JavaScript
A Re-Introduction to JavaScriptA Re-Introduction to JavaScript
A Re-Introduction to JavaScriptSimon Willison
 
Elasticsearch in 15 Minutes
Elasticsearch in 15 MinutesElasticsearch in 15 Minutes
Elasticsearch in 15 MinutesKarel Minarik
 

Was ist angesagt? (20)

ElasticSearch for .NET Developers
ElasticSearch for .NET DevelopersElasticSearch for .NET Developers
ElasticSearch for .NET Developers
 
JSON
JSONJSON
JSON
 
Java script
Java scriptJava script
Java script
 
Basics of JSON (JavaScript Object Notation) with examples
Basics of JSON (JavaScript Object Notation) with examplesBasics of JSON (JavaScript Object Notation) with examples
Basics of JSON (JavaScript Object Notation) with examples
 
Ajax
AjaxAjax
Ajax
 
JSLT: JSON querying and transformation
JSLT: JSON querying and transformationJSLT: JSON querying and transformation
JSLT: JSON querying and transformation
 
JavaScript - From Birth To Closure
JavaScript - From Birth To ClosureJavaScript - From Birth To Closure
JavaScript - From Birth To Closure
 
JSON-(JavaScript Object Notation)
JSON-(JavaScript Object Notation)JSON-(JavaScript Object Notation)
JSON-(JavaScript Object Notation)
 
5 Tips for Better JavaScript
5 Tips for Better JavaScript5 Tips for Better JavaScript
5 Tips for Better JavaScript
 
JSON
JSONJSON
JSON
 
Json - ideal for data interchange
Json - ideal for data interchangeJson - ideal for data interchange
Json - ideal for data interchange
 
Reversing JavaScript
Reversing JavaScriptReversing JavaScript
Reversing JavaScript
 
Java Development with MongoDB
Java Development with MongoDBJava Development with MongoDB
Java Development with MongoDB
 
Data collection in AWS at Schibsted
Data collection in AWS at SchibstedData collection in AWS at Schibsted
Data collection in AWS at Schibsted
 
Elasticsearch And Ruby [RuPy2012]
Elasticsearch And Ruby [RuPy2012]Elasticsearch And Ruby [RuPy2012]
Elasticsearch And Ruby [RuPy2012]
 
Java and XML
Java and XMLJava and XML
Java and XML
 
Reactive Access to MongoDB from Scala
Reactive Access to MongoDB from ScalaReactive Access to MongoDB from Scala
Reactive Access to MongoDB from Scala
 
Elasticsearch (Rubyshift 2013)
Elasticsearch (Rubyshift 2013)Elasticsearch (Rubyshift 2013)
Elasticsearch (Rubyshift 2013)
 
A Re-Introduction to JavaScript
A Re-Introduction to JavaScriptA Re-Introduction to JavaScript
A Re-Introduction to JavaScript
 
Elasticsearch in 15 Minutes
Elasticsearch in 15 MinutesElasticsearch in 15 Minutes
Elasticsearch in 15 Minutes
 

Ähnlich wie Automatically generating-json-from-java-objects-java-objects268

Ajax Tags Advanced
Ajax Tags AdvancedAjax Tags Advanced
Ajax Tags AdvancedAkramWaseem
 
15 expression-language
15 expression-language15 expression-language
15 expression-languagesnopteck
 
13 java beans
13 java beans13 java beans
13 java beanssnopteck
 
Microsoft PowerPoint - &lt;b>jQuery&lt;/b>-1-Ajax.pptx
Microsoft PowerPoint - &lt;b>jQuery&lt;/b>-1-Ajax.pptxMicrosoft PowerPoint - &lt;b>jQuery&lt;/b>-1-Ajax.pptx
Microsoft PowerPoint - &lt;b>jQuery&lt;/b>-1-Ajax.pptxtutorialsruby
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />tutorialsruby
 
02 servlet-basics
02 servlet-basics02 servlet-basics
02 servlet-basicssnopteck
 
java beans
java beansjava beans
java beanslapa
 
Ajax Basics 1
Ajax Basics 1Ajax Basics 1
Ajax Basics 1bhuvanann
 

Ähnlich wie Automatically generating-json-from-java-objects-java-objects268 (20)

Json generation
Json generationJson generation
Json generation
 
Ajax Tags Advanced
Ajax Tags AdvancedAjax Tags Advanced
Ajax Tags Advanced
 
Prototype-1
Prototype-1Prototype-1
Prototype-1
 
Prototype-1
Prototype-1Prototype-1
Prototype-1
 
15 expression-language
15 expression-language15 expression-language
15 expression-language
 
13 java beans
13 java beans13 java beans
13 java beans
 
Microsoft PowerPoint - &lt;b>jQuery&lt;/b>-1-Ajax.pptx
Microsoft PowerPoint - &lt;b>jQuery&lt;/b>-1-Ajax.pptxMicrosoft PowerPoint - &lt;b>jQuery&lt;/b>-1-Ajax.pptx
Microsoft PowerPoint - &lt;b>jQuery&lt;/b>-1-Ajax.pptx
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
jQuery-1-Ajax
jQuery-1-AjaxjQuery-1-Ajax
jQuery-1-Ajax
 
jQuery-1-Ajax
jQuery-1-AjaxjQuery-1-Ajax
jQuery-1-Ajax
 
14 mvc
14 mvc14 mvc
14 mvc
 
02 servlet-basics
02 servlet-basics02 servlet-basics
02 servlet-basics
 
Ajax basics
Ajax basicsAjax basics
Ajax basics
 
java beans
java beansjava beans
java beans
 
10 jdbc
10 jdbc10 jdbc
10 jdbc
 
10 jdbc
10 jdbc10 jdbc
10 jdbc
 
Ajax Basics 1
Ajax Basics 1Ajax Basics 1
Ajax Basics 1
 
JavaScript-Core
JavaScript-CoreJavaScript-Core
JavaScript-Core
 
JavaScript-Core
JavaScript-CoreJavaScript-Core
JavaScript-Core
 
Java script core
Java script coreJava script core
Java script core
 

Kürzlich hochgeladen

IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IES VE
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Websitedgelyza
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsSafe Software
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-pyJamie (Taka) Wang
 
AI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarAI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarPrecisely
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?IES VE
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
Building AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxBuilding AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxUdaiappa Ramachandran
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7DianaGray10
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXTarek Kalaji
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 

Kürzlich hochgeladen (20)

IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Website
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 
20230104 - machine vision
20230104 - machine vision20230104 - machine vision
20230104 - machine vision
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-py
 
AI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarAI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity Webinar
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
Building AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxBuilding AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptx
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBX
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 

Automatically generating-json-from-java-objects-java-objects268

  • 1. © 2010 Marty Hall Automatically Generating JSON from Java Objects Originals of Slides and Source Code for Examples: http://courses.coreservlets.com/Course Materials/ajax.html http://courses.coreservlets.com/Course-Materials/ajax.html Customized Java EE Training: http://courses.coreservlets.com/ Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6. Developed and taught by well-known author and developer. At public venues or onsite at your location. © 2010 Marty Hall For live Ajax & GWT training, see training courses at http://courses.coreservlets.com/. t htt // l t / Taught by the author of Core Servlets and JSP, More Servlets and JSP and this tutorial. Available at JSP, tutorial public venues, or customized versions can be held on-site at your organization. •C Courses d developed and t l d d taught b M t H ll ht by Marty Hall – Java 6, servlets/JSP (intermediate and advanced), Struts, JSF 1.x, JSF 2.0, Ajax, GWT 2.0 (with GXT), custom mix of topics – Ajax courses can concentrate on 1EE Training: http://courses.coreservlets.com/ or survey several Customized Java library (jQuery, Prototype/Scriptaculous, Ext-JS, Dojo, Google Closure) • Courses developed and taught by coreservlets.com experts (edited by Marty) Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6. – Spring, Hibernate/JPA, EJB3, Web Services, Ruby/Rails Developed and taught by well-known author and developer. At public venues or onsite at your location. Contact hall@coreservlets.com for details
  • 2. Topics in This Section • Using org.json Java utilities – Building JSON object from bean – Building JSON array from Java array or List – Building JSON object from Map – Other JSON-generation utilities • Using json2.js JavaScript utilities – Sending JSON objects to server 4 © 2010 Marty Hall Intro and Setup Customized Java EE Training: http://courses.coreservlets.com/ Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6. Developed and taught by well-known author and developer. At public venues or onsite at your location.
  • 3. Using MVC to Build JSON • Last section: used MVC to build JSON – Advantages • Requires no special server software • You have full control over result – Disadvantages • Tedious for complex data structures • Oft requires knowledge of how server will use data Often i k l d fh ill d t • This section: turning Java into JSON – Advantages • Can generate complex data easily • Builds real objects so server can decide what to do – Di d Disadvantages • Requires JSON-specific server software 6 • Sometimes builds objects with unneeded data in them Installing the org.json.* Utilities • Download – http://www.json.org/java/json.zip • Or start at http://www.json.org/java/ and follow link that says “Free source code is available”. y • Install – Unzip to get org/json/*.java – Put into src folder of Eclipse • Create new package org.json, then copy files there – They do not supply a JAR file but you could easily build file, one yourself, then put JAR file in WEB-INF/lib • Built org.json-utils.jar and put online at coreservlets.com • Documentation – http://www.json.org/java/ 7
  • 4. Configuring Eclipse Project Used only in last example. Available for download at http://www.json.org/json2.js. You can also get compressed version; see http://www.json.org/js.html. Used in all examples. Available for download at http://courses.coreservlets.com/Course-Materials/ajax.html http://courses coreservlets com/Course-Materials/ajax html Downloaded latest .java files from http://www.json.org/java/, compiled, and put resultant .class files in JAR file. Or, you can put .java files from http://www.json.org/java/ directly in src/org.json. 8 Other JSON-Generation Software • org.json utilities (used in this tutorial) – Wid l used Widely d • Used within other utilities (e.g., JSON-RPC) – Limited power • Alt Alternatives ti – Google Gson • Better support for generics • htt // d http://code.google.com/p/google-gson/ l / / l / – JSON Taglib • More usable directly from JSP • http://json taglib sourceforge net/ http://json-taglib.sourceforge.net/ – VRaptor • Uses annotations for much of the work • http://vraptor org/ajax html http://vraptor.org/ajax.html – Many more • See “Java” entry at http://json.org/ 9
  • 5. © 2010 Marty Hall Supporting Java Code (Used in All Examples) Customized Java EE Training: http://courses.coreservlets.com/ Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6. Developed and taught by well-known author and developer. At public venues or onsite at your location. Main Bean: City.java • Constructor public City(String name, int timeZone, int pop) { setName(name); setTimeZone(timeZone); setPop(pop); } • Getter methods – getName – getTime, getTimeZone • Assumes server is in US east coasts subtracts 0-3 hours coasts, 03 based on time zone – getPop • Raw population as an int – getPopulation 11 • Formatted population as a String with commas
  • 6. Utilities for Finding Beans: CityUtils.java CityUtils java • Map that associates city name with City private static Map<String,City> biggestAmericanCities = new HashMap<String,City>(); • Populate it with largest US cities • L k Lookup f functions ti public static City getCity(String name) { name = name.toUpperCase(); return(biggestAmericanCities.get(name)); } 12 Utilities for Finding Beans: CityUtils.java CityUtils java Continued • Map that associates category of cities with city names i private static Map<String,String[]> cityTypeMap; • Lookup function public static List<City> findCities(String cityType) { String[] cityNames = cityTypeMap get(cityType); cityTypeMap.get(cityType); if (cityNames == null) { String[] twoCities = { "New York", "Los Angeles" }; cityNames = twoCities; } List<City> cities = new ArrayList<City>(); for(String cityName: cityNames) { cities.add(getCity(cityName)); cities add(getCity(cityName)); } return(cities); 13 }
  • 7. Parent Servlet Class: ShowCities.java ShowCities java public abstract class ShowCities extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); response.setContentType("text/javascript"); List<City> cities = getCities(request); outputCities(cities, request, response); } protected List<City> getCities(HttpServletRequest request) { String cityType = request.getParameter("cityType"); return(CityUtils.findCities(cityType)); } 14 Parent Servlet Class: ShowCities.java ShowCities java Continued public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public abstract void outputCities (List<City> cities, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; } 15
  • 8. © 2010 Marty Hall General Approach Customized Java EE Training: http://courses.coreservlets.com/ Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6. Developed and taught by well-known author and developer. At public venues or onsite at your location. Steps for Servlet Using JSON Utilities • Set normal response headers – response.setHeader f P tH d for Pragma and C h C t l d Cache-Control • Set Content-Type to text/javascript – response.setContentType("text/javascript"); • Get PrintWriter in normal manner – PrintWriter out = response.getWriter • Get result as bean array or Map bean, array, – Call normal business logic code • Turn Java object into JSONObject – JSONObject result = new JSONObject(bean); – JSONArray result = new JSONArray(arrayOfBeans, false); – JSONObject result = new JSONObject(map); j j ( p) • Output JSONObject with print – out.print(result); 17
  • 9. Steps for Using JSON Utilities: Sample Servlet Code public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); response.setContentType("text/javascript"); PrintWriter out = response.getWriter(); SomeBean javaResult = callSomeBusinessLogic(…); JSONObject jsonResult = new JSONObject(javaResult); p (j ); out.print(jsonResult); } These two lines are the only ones that typically change from application t application. Oth li f li ti to li ti Other lines stay exactly as iis. t tl 18 © 2010 Marty Hall Turning Java Beans j into JSONObject Customized Java EE Training: http://courses.coreservlets.com/ Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6. Developed and taught by well-known author and developer. At public venues or onsite at your location.
  • 10. Turning Beans into JSON • org.json defines JSONObject – I toString method builds JSON f Its S i h d b ild format • Most important constructor takes a bean – JSONObject json = new JSONObject(myBean); • Second arg of “true” means to include superclass info – Result • Uses reflection on myBean to find all public methods of the form getBlah (any return type) or isBlah (boolean return) • Calls each getter method • If myBean has getFoo and getBar, it builds object of the form { "foo": "getFoo() result", "bar": "getBar() result"} • Other capabilities – Can turn Map into JSONObject (keys become properties) – Can add properties one at a time with “put” 20 JSONObject from Bean: Example Code package coreservlets; import org.json.*; public class CityTest1 { public static void main(String[] args) { City sf = CityUtils.getCity("San Francisco"); JSONObject fJSON JSONObj t sfJSON = new JSONObj t( f) JSONObject(sf); System.out.println("JSON version of SF is:n" + sfJSON); } } Note: toString is automatically called when you print an Object in Java. It is the toString method of JSONObject that builds the JSON representation. 21
  • 11. JSONObject from Bean: Example Result JSON version of SF is: {"time": "06:00:55 AM" AM", "name": "San Francisco", "timeZone": -3, "pop": 744041, "population": " 744,041"} • (White space added for readability) 22 Building Arrays of JSON Info • org.json defines JSONArray – Its toString method outputs array in JSON format • Most important constructors – new JSONA JSONArray(javaArrayOrCollection) (j A O C ll i ) • Assumes javaArrayOrCollection contains primitives, Strings, or JSONObjects – new JSONArray(javaArrayOrCollection, false) • Assumes javaArrayOrCollection contains beans that should be converted as in previous section, but you don’t p , y want to include superclass info – new JSONArray(javaArrayOrCollection, true) • Assumes javaArrayOrCollection contains beans that should be converted as in previous section, but you do want to include superclass info 23
  • 12. JSONArray: Example Code package coreservlets; import org.json.*; import java.util.*; public class CityTest2 { public static void main(String[] args) { List<City> biggestUSCities = CityUtils.findCities("top-5-cities"); JSONArray citiesJSON = new JSONArray(biggestUSCities, false); e JSO ay(b ggestUSC t es, a se); System.out.println("JSON version of biggest " + "US cities is:n" + ); citiesJSON); } } 24 JSONArray: Example Result JSON version of biggest US cities is: [{"time":"09:14:16 AM" "name":"New York" AM", York", "timeZone":0,"pop":8250567,"population":"8,250,567"}, {"time":"06:14:16 AM", "name":"Los Angeles", "timeZone":-3,"pop":3849368,"population":"3,849,368"}, "timeZone": 3 "pop":3849368 "population":"3 849 368"} {"time":"08:14:16 AM", "name":"Chicago", "timeZone":-1,"pop":2873326,"population":"2,873,326"}, {"time":"08:14:16 AM", " {"ti " "08 14 16 AM" "name":"Houston", " "H t " "timeZone":-1,"pop":2144491,"population":"2,144,491"}, {"time":"07:14:16 AM", "name":"Phoenix", "timeZone":-2,"pop":1512986,"population":"1,512,986"}] "ti Z " 2 " " 1512986 " l ti " "1 512 986"}] • (White space added for readability) 25
  • 13. © 2010 Marty Hall Comparing M C i Manual and l d Automatic JSON Generation Customized Java EE Training: http://courses.coreservlets.com/ Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6. 26 Developed and taught by well-known author and developer. At public venues or onsite at your location. Manual Generation: Server Code (Servlet) public class ShowCities1 extends ShowCities { public void outputCities(List<City> cities cities, HttpServletRequest request, HttpServletResponse response) throws ServletException IOException { ServletException, request.setAttribute("cities", cities); String outputPage = "/WEB-INF/results/cities-json.jsp"; "/WEB INF/ lt / iti j j " RequestDispatcher dispatcher = request.getRequestDispatcher(outputPage); dispatcher.include(request, response); di t h i l d ( t ) } } 27
  • 14. Manual Generation: Server Code (JSP) { headings: ["City", "Time", "Population"], cities: [["${cities[0] name}" "${cities[0] time}" [["${cities[0].name}", "${cities[0].time}", "${cities[0].population}"], ["${cities[1].name}", "${cities[1].time}", "${cities[1].population}"], ["${cities[2].name}", "${cities[2].time}", "${cities[2].population}"], ["${cities[3].name}", "${cities[3].time}", "${cities[3].population}"], [ ${ ["${cities[4].name}", "${cities[4].time}", [ ] } , ${ [ ] } , "${cities[4].population}"]] } 28 Manual Generation: Client Code function cityTable1(address, inputField, resultRegion) { var data = "cityType=" + getValue(inputField); ajaxPost(address, data, function(request) { showCityInfo1(request, showCityInfo1(request resultRegion); }); } • Note: – ajaxPost shown in previous tutorial section • Sends data via POST and passes result to handler function 29
  • 15. Manual Generation: Client Code (Continued) // Data that arrives is JSON object with two properties: // - headings (an array of strings for the th elements) // - cities (an array of array of strings // matching the heading names) function showCityInfo1(request, resultRegion) { if ((request.readyState == 4) && (request.status == 200)) { ( t t t var rawData = request.responseText; var data = eval("(" + rawData + ")"); var t bl = getTable(data.headings, d t table tT bl (d t h di data.cities); iti ) htmlInsert(resultRegion, table); } } 30 Manual Generation: HTML Code <fieldset> <legend>JSON Data: Original MVC Approach</legend> g g pp / g <form action="#"> <label for="city-type-1">City Type:</label> <select id="city-type-1"> <option value="top-5-cities">Largest Five US Cities</option> / <option value="second-5-cities">Second Five US Cities</option> … /se ect </select> <br/> <input type="button" value="Show Cities" onclick='cityTable1("show-cities-1", "city-type-1", "json-city-table-1")'/> / </form> <p/> <div id="json-city-table-1"></div> id json city table 1 ></div> </fieldset> 31
  • 16. Manual Generation: Results 32 Manual Generation: Pros and Cons • Advantages – Requires no JSON-specific software on server – Java code is moderately simple – Client code is simple • Disadvantages – JSP code is complex – JSP code cannot adapt to arbitrary number of cities • This can be fixed with JSTL – see next tutorial section – Server code needs to know a lot about how client code will use results. Server code essentially pre-processed the data and put it in form ready for p p y presentation. • If you are going to do that, why bother with data-centric Ajax? Why not just send HTML table from the server? 33
  • 17. Automatic Generation: Server Code (Servlet) public class ShowCities2 extends ShowCities { public void outputCities(List<City> cities cities, HttpServletRequest request, HttpServletResponse response) throws ServletException IOException { ServletException, PrintWriter out = response.getWriter(); out.println(new JSONArray(cities, false)); } } 34 Automatic Generation: Server Code (JSP) • None! 35
  • 18. Automatic Generation: Client Code function cityTable2(address, inputField, resultRegion) { var data = "cityType=" + getValue(inputField); ajaxPost(address, data, function(request) { showCityInfo2(request, showCityInfo2(request resultRegion); }); } • Note: – Only difference from previous example is that result is passed to showCityInfo2 instead of ShowCityInfo1 36 Automatic Generation: Client Code (Continued) // Data that arrives is an array of city objects. // City objects contain (among other things) // name, time, and population properties. function showCityInfo2(request, resultRegion) { if ((request.readyState == 4) && (request.status == 200)) { var rawData = request.responseText; var cities = eval("(" + rawData + ")"); eval( ( ) ); var headings = ["City", "Time", "Population"]; var rows = new Array(); for(var i=0; i<cities.length; i++) { var city = cities[i]; rows[i] = [city.name, city.time, city.population]; } var t bl = getTable(headings, rows); table tT bl (h di ) htmlInsert(resultRegion, table); } 37 }
  • 19. Automatic Generation: HTML Code <fieldset> <legend>JSON Data: Automatic Conversion of Lists</legend> g / g <form action="#"> <label for="city-type-2">City Type:</label> <select id="city-type-2"> <option value="top-5-cities">Largest Five US Cities</option> / <option value="second-5-cities">Second Five US Cities</option> … /se ect </select> <br/> <input type="button" value="Show Cities" onclick='cityTable2("show-cities-2", "city-type-2", "json-city-table-2")'/> / </form> <p/> <div id="json-city-table-2"></div> id json city table 2 ></div> </fieldset> 38 Automatic Generation: Results 39
  • 20. Automatic Generation: Pros and Cons • Advantages – Java code i very simple J d is i l – No JSP whatsoever – Server code can adapt to arbitrary number of cities p y – Server code does not need to know how client code will use the result – Client code has “real” data so can do logic based on it real • Disadvantages – Requires JSON-specific software on server – Client code is more complex • It needs to extract data from objects before sending it to table-building function – Extra fields were sent • Client did not use timeZone and pop properties, but they 40 were sent anyway © 2010 Marty Hall Turning Java Maps into JSONObject j Customized Java EE Training: http://courses.coreservlets.com/ Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6. Developed and taught by well-known author and developer. At public venues or onsite at your location.
  • 21. Building JSONObject from Map • Most important JSONObject constructors – new JSONObject(bean) • Uses reflection on myBean to find all public methods of the form getBlah (any return type) or isBlah (boolean return) g ( y yp ) ( ) • Calls each getter method • If myBean has getFoo and getBar, it builds object of the form { "foo": "getFoo() result , "bar": "getBar() result } foo : getFoo() result", bar : getBar() result"} – new JSONObject(bean, true) • Same as above but includes inherited methods • Oth constructors Other t t – new JSONObject(map) • Map keys become JSON property names – new JSONObject(string) 42 • Useful when passing JSON to the server JSONObject from Map: Example Code package coreservlets; import org.json.*; import java.util.*; public class CityTest3 { public static void main(String[] args) { Map<String,String[]> cities = M <St i St i []> iti CityUtils.getCityTypeMap(); JSONObject citiesJSON = new JSONObject(cities); ( ) System.out.println("JSON version of map of " + "US cities is:n" + citiesJSON); } 43 }
  • 22. JSONObject from Map: Example Result JSON version of map of US cities is: { superbowl hosts : {"superbowl-hosts": ["Phoenix","Miami", "Detroit","Jacksonville","Houston"], top 5 cities : "top-5-cities": ["New York","Los Angeles", "Chicago","Houston","Phoenix"], cities starting with s : "cities-starting-with-s": ["San Antonio","San Diego", "San Jose","San Francisco","Seattle"], seco d 5 c t es : "second-5-cities": ["Philadelphia","San Antonio", "San Diego","Dallas","San Jose"]} • (White space added for readability) 44 Converting Maps: Server Code public class ShowCityTypes extends HttpServlet { public void doGet(HttpServletRequest request request, HttpServletResponse response) throws ServletException, IOException { response.setHeader( Cache Control response setHeader("Cache-Control", "no-cache"); no cache ); response.setHeader("Pragma", "no-cache"); response.setContentType("text/javascript"); PrintWriter out = response.getWriter(); JSONObject cityTypes = new JSONObject(CityUtils.getCityTypeMap()); out.p out.println(cityTypes); t (c ty ypes); } 45
  • 23. Converting Maps: Server Code (Continued) public void doPost(HttpServletRequest request request, HttpServletResponse response) throws ServletException, IOException { doGet(request, doGet(request response); } } 46 Converting Maps: Client Code function cityTypeList(address, resultRegion) { ajaxPost(address, null, ajaxPost(address null function(request) { showCityTypeInfo(request, resultRegion); }); } // Data that arrives is an object where the // properties are city categories and the // assoc ated values a e a ays o c ty names. associated a ues are arrays of city a es. 47
  • 24. Converting Maps: Client Code (Continued) function showCityTypeInfo(request, resultRegion) { if ((request.readyState == 4) && (request.status == 200)) { var rawData = request.responseText; var cityTypes = eval("(" + rawData + ")"); var headings = new Array(); Object property names are city var row1Entries = new Array(); categories like “top-5-cities” var i = 0; for(var cityType in cityTypes) { headings[i] = cityType; row1Entries[i] = getBulletedList(cityTypes[cityType]); i++; } var rows = [row1Entries]; var result = getTable(headings, rows); Object property values are arrays of city names ( y y (cities htmlInsert(resultRegion, result); ht lI t( ltR i lt) that match the category) } } 48 Converting Maps: Client Code (Continued) function getBulletedList(listItems) { var list = "<ul>n"; for(var i=0; i<listItems.length; i++) { list = list + " <li>" + listItems[i] + "</li>n"; } list = list + "</ul>" return(list); } 49
  • 25. Converting Maps: HTML Code <fieldset> <legend>JSON Data: Automatic Conversion of Maps</legend> <form action="#"> <input type="button" value="Show City Types" onclick cityTypeList( show city types , onclick='cityTypeList("show-city-types", "city-types")'/> </form> <p/> p/ <div id="city-types"></div> </fieldset> 50 Converting Maps: Results 51
  • 26. © 2010 Marty Hall Sending JSON Data from Client to Server Customized Java EE Training: http://courses.coreservlets.com/ Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6. Developed and taught by well-known author and developer. At public venues or onsite at your location. Using JSON.stringify • Download json2.js – h // http://www.json.org/json2.js j /j 2 j – Or, start at http://www.json.org/js.html and follow links at bottom of page • Install in your project – E.g., in Eclipse, drop in WebContent/scripts – Load json2.js in your HTML file json2 js • Call JSON.stringify on JavaScript object – Produces string in JSON format representing object g p g j • Call escape on result – URL-encode characters for transmission via HTTP • S d in POST to client Send i t li t – Data might be large, so POST is better than GET 53
  • 27. Utility Function function makeJsonString(object) { return(escape(JSON.stringify(object))); } 54 Receiving JSON Objects on Server • Pass string to JSONObject or JSONArray constructor – String jsonString = request.getParameter(…); – JSONArray myArray = new JSONArray(jsonString); • Access elements with getBlah methods – Primitives • getInt, getDouble, getString, getBoolean, isNull • double d = myArray.getDouble(0); – S Server needs t know the types that will b sent f d to k th t th t ill be t from client li t – High-level • getJSONObject, getJSONArray 55
  • 28. Sending JSON to Server: Client Code function randomCityTable(address, resultRegion) { var data = "cityNames=" + cityNames= makeJsonString(getRandomCities()); ajaxPost(address, data, function(request) { showCityInfo2(request, resultRegion); }); } This is the same showCityInfo2 function used earlier. Takes an array of city objects and makes HTML table from their names, times, and populations. 56 Sending JSON to Server: Client Code (Continued) var cityNames = [ New York , Los Angeles", Chicago , Houston , ["New York", "Los Angeles , "Chicago", "Houston", "Phoenix", "Philadelphia", "San Antonio", "San Diego", "Dallas", "San Jose", "Detroit", "Jacksonville", "Indianapolis", "San Francisco", "Columbus", "Austin", p , , , , "Memphis", "Fort Worth", "Baltimore", "Charlotte", "El Paso", "Milwaukeee", "Boston", "Seattle", "Washington DC", "Denver", "Louisville", "Las Vegas", "Nashville", "Oklahoma City", "Miami"]; 57
  • 29. Sending JSON to Server: Client Code (Continued) function getRandomCities() { var randomCities = new Array(); var j = 0; for(var i=0; i<cityNames.length; i++) { if(Math.random() < 0.25) { ( () ) randomCities[j++] = cityNames[i]; } } return(randomCities); } 58 Sending JSON to Server: HTML Code <script src="./scripts/ajax-utils.js" type text/javascript ></script> type="text/javascript"></script> <script src="./scripts/json-generation-examples.js" type="text/javascript"></script> <script src="./scripts/json2.js" p p j j type="text/javascript"></script> … <fieldset> <legend>JSON Data: Sending JSON <i>to</i> Server</legend> <form action="#"> <input type="button" value="Show Random Cities" onclick='randomCityTable("show-cities-3", "json-city-table-3")'/> </form> <p/> <div id="json-city-table-3"></div> 59 </fieldset>
  • 30. Sending JSON to Server: Server Code public class ShowCities3 extends ShowCities { p protected List<City> getCities(HttpServletRequest request) { y g ( p q q ) String cityNames = request.getParameter("cityNames"); if ((cityNames == null) || (cityNames.trim().equals(""))) { cityNames = "['New York', 'Los Angeles]"; } try { JSONArray jsonCityNames = new JSONArray(cityNames); List<City> c t es = new ArrayList<City>(); st C ty cities e ay st C ty (); for(int i=0; i<jsonCityNames.length(); i++) { City city = CityUtils.getCityOrDefault(jsonCityNames.getString(i)); cities.add(city); } return(cities); } catch(JSONException jse) { return(CityUtils.findCities("top-5-cities")); } 60 } Sending JSON to Server: Results 61
  • 31. © 2010 Marty Hall Wrap-up Customized Java EE Training: http://courses.coreservlets.com/ Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6. Developed and taught by well-known author and developer. At public venues or onsite at your location. Preview of Next Section: JSON-RPC • Simpler designation of server-side resource – Client-side code acts as if it is calling a server-side function (not a URL) • Simpler client side code client-side – Client-side code passes and receives regular arguments • Passing: no need to escape data or build param strings g p p g • Receiving: no need to use responseText or eval • Simpler server-side code –S Server-side code receives and returns regular arguments id d i d l • Receiving: no need to call request.getParamter & convert • Returning: results automatically converted with JSONObject and JSONArray 63
  • 32. Summary • Building JSON from Java – new JSONObject(bean) – new JSONArray(arrayOrCollectionOfBeans, false) – new JSONObject(map) • Outputting JSON String – myJSONObject toString() myJSONArray toString() myJSONObject.toString(), myJSONArray.toString() • When you do out.print, toString is invoked automatically • Sending JSON to server – escape(JSON.stringify(javaScriptObject)) • Receiving JSON on server – new JSONObject(string) or new JSONArray(string) – myArray.getString(i), myArray.getDouble(i), etc. 64 © 2010 Marty Hall Questions? Customized Java EE Training: http://courses.coreservlets.com/ Servlets, JSP, JSF 1.x, JSF 2.0, Struts, Ajax, GWT 2.0, GXT, Spring, Hibernate/JPA, Java 5, Java 6. Developed and taught by well-known author and developer. At public venues or onsite at your location.