JSONによるデータ交換の例

54465 ワード

1 JavaScriptオブジェクトのプロパティへのアクセス
1.1問題
JavaScriptオブジェクトのプロパティへのアクセス
1.2シナリオ
JavaScriptオブジェクトを初期化して作成し、オブジェクトのプロパティにアクセスします.
1.3手順
ステップ1:json 01を新規作成する.htmlファイル
リンクのクリックアクションを追加し、メソッドを呼び出します.
ステップ2:結果の表示の実行
手順3:複雑なオブジェクトの追加
手順4:結果の表示の実行
1.4完全なコード
json01.htmlファイルコードは次のとおりです.
<html>
    <head>
        <title>json01.html</title>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <script type="text/javascript">
            function f1(){
                var obj = {'name':'Luffy','age':17};
                alert(obj.name + "  " + obj.age);
            }
            function f2(){
                var obj = {'name':'Luffy',
                        'address':{
                                    'city':'Beijing',
                                    'street':'dzs',
                                    'room':17                    
                                  }};
                alert(obj.name + "  " + obj.address+"     "+obj.address.city );
            }
        </script>
    </head>

    <body>
        <!—-   JavaScript        -->
        <a href="javascript:;" onclick="f1();">      1</a>
        </br>
        <a href="javascript:;" onclick="f2();">      2</a>
    </body>
</html>

 
2 Javacriptオブジェクト配列へのアクセス
2.1問題
JavaScriptオブジェクト配列の要素へのアクセス
2.2シナリオ
配列のフォーマット要件に従い、カッコの先頭と末尾を使用します.
2.3手順
ステップ1:json 02を新規作成する.htmlファイル、ファイルにリンクを追加してメソッド呼び出しのテストを行います.最初のメソッドf 3()を追加します.
ステップ2:結果の表示の実行
ステップ3:次のメソッドf 4()を追加する
手順4:結果の表示の実行
2.4完全コード
json02.htmlファイルコードは次のとおりです.
<html>
    <head>
        <title>json02.html</title>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <script type="text/javascript">
            function f3(){
                var arr = [ {'name':'Luffy','age':17},
                             {'name':'Zoro','age':19}];
                 alert(arr[1].name);
            }
            function f4(){
                var obj = {'name':'Luffy',
                        'friends':[{'name':'Zoro','age':19},
                                   {'name':'Nami','age':18}]
                           };
                alert(obj.name + "  " + obj.friends[1].name);
            }
        </script>
    </head>

    <body>
        <!—   JavaScript     -->
        <a href="javascript:;" onclick="f3();">          1</a>
        </br>
        <a href="javascript:;" onclick="f4();">          2</a>
    </body>
</html>

 
3 JSON文字列をJavaScriptオブジェクトに変換
3.1問題
JSON形式の要件を満たす文字列を、JavaScriptオブジェクトに変換します.
3.2シナリオ
オリジナルのevalメソッドまたはオリジナルオブジェクトJSONを利用する.parse(str)メソッド.
3.3手順
ステップ1:json 03を新規作成する.htmlファイル
ファイルにスクリプトコードを追加し、f 5()メソッドは文字列からオブジェクトへの遷移プロセスです.
JSONというオリジナルオブジェクトは文字列とオブジェクト間の変換方法を提供していますが、ブラウザが所望の出力結果を得ることができないのは、バージョンが低すぎてこのオリジナルオブジェクトをサポートしていないからです.
ステップ2:結果の表示の実行
ステップ3:メソッドf 6()を追加し、配列の変換を実現する
手順4:結果の表示の実行
ステップ5:f 7()メソッドを追加し、オブジェクトから文字列への変換を実現する
手順6:結果の表示の実行
3.4完全なコード
    <html>
      <head>
        <title>json03.html</title>       
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
       
        <script type="text/javascript" src="js/json.js"></script>    
        <script type="text/javascript">
        
            /*JSON    JSON  */
            function f5(){
                var str = '{"name":"Luffy","age":17}';    
                        
                // 1   (     js  )
                //var obj = eval("("+str+")");
                
                 2   (   json.js  )
                //var obj = JSON.parse(str);
                
                // 3   (  json.js  )
                //var obj = str.parseJSON();
                            
                alert(obj.name);
            }
            
            /*JSON    JSON  */
            function f6(){
                var str = '[{"name":"Luffy","age":17},' + 
                          '{"name":"Zoro","age":19}]';        
               
                // 1   (   json.js  )
                var arr = eval("("+str+")");
                
                // 2   (  json.js  )
                //var arr = str.parseJSON();
                
                alert(arr[1].name);
            }
            
            /*JSON   JSON   */
            function f7(){
                var obj = {"name":"Luffy","age":17};
                
                // 1   (  json.js  )
                //var str = obj.toJSONString();
               
                // 2   (   json.js  )
                var str = JSON.stringify(obj);
                alert(str);
            }
        </script>
      </head>  
      <body>
          <!--   JSON     -->
        <a href="javascript:;" onclick="f5();">JSON   -->JSON  </a><br/><br/><br/>
        <a href="javascript:;" onclick="f6();">JSON   -->JSON  </a><br/><br/><br/>
        <a href="javascript:;" onclick="f7();">JSON  -->JSON   </a><br/><br/><br/>
      </body>
    </html>

 
4 JavaオブジェクトをJSON文字列に変換
4.1問題
JavaオブジェクトをJSON形式の文字列に変換し、テストします.
4.2シナリオ
json-libとの使用jar関連jarファイルはタイプの変換を完了します.
4.3手順
ステップ1:新規エンティティークラスFriend
 
package com.souvc.json;

public class Friend {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return this.name + "   " + this.age;
    }
}

 
ステップ2:JSOnTestクラスの新規作成
このクラスには、JavaオブジェクトがJSON文字列に変換され、Java配列がJSON文字列に変換され、JSON文字列がJavaオブジェクトに変換され、JSON文字列がJava配列に変換される4つのメソッドを追加します.
ステップ3:jarファイルの導入
jarファイルを追加する場合は、6つのjarファイルをインポートする必要があります.
ディスクjarパッケージのダウンロードアドレス:http://yunpan.cn/cQyHfiAYWHmhgアクセスパスワードab 8 f
 
          json-lib   

         :http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/ json-lib        : jakarta commons-lang 2.5 
jakarta commons-beanutils 1.8.0
jakarta commons-collections 3.2.1
jakarta commons-logging 1.1.1
ezmorph 1.0.6

ステップ4:具体的な変換方法を追加する:JavaオブジェクトをJSON文字列に変換する
 
/**
     * Java     JSON   
     */
    public static void test1() {
        Friend f = new Friend();
        f.setName("Zoro");
        f.setAge(19);
        JSONObject jsonObj = JSONObject.fromObject(f);
        String jsonStr = jsonObj.toString();
        System.out.println(jsonStr);
    }

 
ステップ5:実行結果
 
{"age":19,"name":"Zoro"}

 
 
ステップ6:Java配列(集合)をJSON文字列に変換する
 
/**
     * JSON      Java  
     */
    public static void test4() {
        String jsonStr = "[{\"name\":\"Luffy\",\"age\":17},"
                + "        {\"name\":\"Zoro\",\"age\":19}]";
        JSONArray jsonArr = JSONArray.fromObject(jsonStr);
        List<Friend> friends = (List<Friend>) JSONArray.toCollection(jsonArr,
                Friend.class);
        for (Friend f : friends) {
            System.out.println(f);
        }
    }

 
実行結果:
 
[{"age":19,"name":"Zoro1"},{"age":20,"name":"Zoro2"},{"age":21,"name":"Zoro3"}]

 
ステップ7:JSON文字列をJavaオブジェクトに変換する
/**
     * JSON      Java  
     */
    public static void test3() {
        String jsonStr = "{\"name\":\"Luffy\",\"age\":17}";
        JSONObject jsonObj = JSONObject.fromObject(jsonStr);
        Friend friend = (Friend) JSONObject.toBean(jsonObj, Friend.class);
        System.out.println(friend);
    }

 
実行結果:
 
Luffy   17

 
ステップ8:JSON文字列をJava配列(集合)に変換
 
/**
     * JSON      Java  
     */
    public static void test4() {
        String jsonStr = "[{\"name\":\"Luffy\",\"age\":17},"
                + "        {\"name\":\"Zoro\",\"age\":19}]";
        JSONArray jsonArr = JSONArray.fromObject(jsonStr);
        List<Friend> friends = (List<Friend>) JSONArray.toCollection(jsonArr,
                Friend.class);
        for (Friend f : friends) {
            System.out.println(f);
        }
    }

 
実行結果:
 
Luffy   17
Zoro   19

 
4.4完全コード
Friend.JAvaファイルコードは次のとおりです.
package com.souvc.json;

public class Friend {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return this.name + "   " + this.age;
    }
}

 
JSOnTestコード:
package com.souvc.json;

import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class JSONTest {
    /**
     * Java     JSON   
     */
    public static void test1() {
        Friend f = new Friend();
        f.setName("Zoro");
        f.setAge(19);
        JSONObject jsonObj = JSONObject.fromObject(f);
        String jsonStr = jsonObj.toString();
        System.out.println(jsonStr);
    }

    /**
     * Java     JSON   
     */
    public static void test2() {
        List<Friend> fs = new ArrayList<Friend>();
        for (int i = 0; i < 3; i++) {
            Friend f = new Friend();
            f.setName("Zoro" + (i + 1));
            f.setAge(19 + i);
            fs.add(f);
        }
        JSONArray jsonArr = JSONArray.fromObject(fs);
        String jsonStr = jsonArr.toString();
        System.out.println(jsonStr);
    }

    /**
     * JSON      Java  
     */
    public static void test3() {
        String jsonStr = "{\"name\":\"Luffy\",\"age\":17}";
        JSONObject jsonObj = JSONObject.fromObject(jsonStr);
        Friend friend = (Friend) JSONObject.toBean(jsonObj, Friend.class);
        System.out.println(friend);
    }

    /**
     * JSON      Java  
     */
    public static void test4() {
        String jsonStr = "[{\"name\":\"Luffy\",\"age\":17},"
                + "        {\"name\":\"Zoro\",\"age\":19}]";
        JSONArray jsonArr = JSONArray.fromObject(jsonStr);
        List<Friend> friends = (List<Friend>) JSONArray.toCollection(jsonArr,
                Friend.class);
        for (Friend f : friends) {
            System.out.println(f);
        }
    }

    public static void main(String[] args) {
        test1();
        test2();
        test3();
        test4();
    }

}

 
5 JSONでカスケードプルダウンリストを完成する
5.1問題
非同期リクエストと組み合わせて、都市のカスケードドロップダウンリストを実現します.
5.2方案
クライアントスクリプトとサーバ側プロセッサを別々に作成します.サーバ側はJavaオブジェクトを転送に変換するJSON文字列を実装する.クライアントはこの文字列を受け取ってから変換してJavaScriptオブジェクトになり、オブジェクトの各属性を使用してドロップダウンボックスのOptionオプションを構築してselectの下に追加します.
5.3手順
ステップ1:新規エンティティークラスCity
package com.souvc.json;

public class City {
    private String cityName;
    private String cityValue;

    public City() {
        super();
    }

    public City(String cityName, String cityValue) {
        super();
        this.cityName = cityName;
        this.cityValue = cityValue;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public String getCityValue() {
        return cityValue;
    }

    public void setCityValue(String cityValue) {
        this.cityValue = cityValue;
    }
}

 
ステップ2:新しいActionServicelet
 
package com.souvc.json;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

public class ActionServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        
        PrintWriter out = response.getWriter();
        
        //      
        String uri = request.getRequestURI();
        //      
        String action = uri.substring(uri.lastIndexOf("/"), uri
                .lastIndexOf("."));
        
        if (action.equals("/city")) {
            String name = request.getParameter("name");
            if (name.equals("bj")) {
                City c1 = new City("  ", "hd");
                City c2 = new City("  ", "dc");
                City c3 = new City("  ", "xc");
                List<City> cs = new ArrayList<City>();
                cs.add(c1);
                cs.add(c2);
                cs.add(c3);
                JSONArray obj = JSONArray.fromObject(cs);
                String str = obj.toString();
                out.println(str);
                
            } else if (name.equals("sh")) {
                City c1 = new City("  ", "xh");
                City c2 = new City("  ", "ja");
                City c3 = new City("  ", "hp");
                List<City> cs = new ArrayList<City>();
                cs.add(c1);
                cs.add(c2);
                cs.add(c3);
                JSONArray obj = JSONArray.fromObject(cs);
                String str = obj.toString();
                out.println(str);
            }
            
        }
        out.close();
    }
}

 
手順3:cityを新規作成します.htmlファイル
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>city.html</title>

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">

        <script type="text/javascript" src="js/json2.js"></script>
        <script type="text/javascript">
        function getXmlHttpRequest(){
            var xhr = null;
               if((typeof XMLHttpRequest)!='undefined'){
                  xhr = new XMLHttpRequest();
               }else {
                  xhr = new ActiveXObject('Microsoft.XMLHttp');
               }
               return xhr;
        }
        function change(v1){
            var xhr = getXmlHttpRequest();
            xhr.open('post','city.do',true);
            xhr.setRequestHeader("Content-Type",
                "application/x-www-form-urlencoded");
            xhr.onreadystatechange=function(){
                if(xhr.readyState == 4){
                    var txt = xhr.responseText;
                    var citys = txt.parseJSON();
                    document.getElementById('s2').innerHTML = '';
                    for(i=0;i<citys.length;i++){
                        var op = 
                        new Option(citys[i].cityName,
                        citys[i].cityValue);
                        document.getElementById('s2').options[i] = op;
                    }
                }
            };
            xhr.send('name=' + v1);
        }
    </script>
    </head>

    <body>
        <select id="s1" style="width: 120px;" onchange="change(this.value);">
            <option value="sh">
                  
            </option>
            <option value="bj">
                  
            </option>
        </select>
        <select id="s2" style="width: 120px;">
        </select>
    </body>
</html>

 
手順4:結果の表示の実行
 
5.4完全コード
以上のように.
 
6ヒット商品のダイナミック表示
6.1問題
5秒ごとに、現在販売されている最高の3つの商品が表示されます.
6.2シナリオ
Ajaxリクエストは5秒ごとに送信され、返されたJSON配列データがページのdivに表示されます.
6.3手順
ステップ1:新規Saleクラス
package com.souvc.json;

public class Sale {
    private int id;
    private String prodName;
    private int qty;

    public Sale() {
        super();
    }

    public Sale(int id, String prodName, int qty) {
        super();
        this.id = id;
        this.prodName = prodName;
        this.qty = qty;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getProdName() {
        return prodName;
    }

    public void setProdName(String prodName) {
        this.prodName = prodName;
    }

    public int getQty() {
        return qty;
    }

    public void setQty(int qty) {
        this.qty = qty;
    }
}

 
ステップ2:新しいdaoパッケージの下にあるDBUtilクラスとSaleDAOクラス
DBUtil.JAvaファイル:
package com.souvc.json;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * JDBC        ,           
 */
public class DBUtil {
    /**
     *       
     */
    public static Connection getConnection() throws Exception {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/csdn", "root", "123456");
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
        return conn;
    }

    /**
     *       
     */
    public static void close(Connection conn) throws Exception {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw e;
            }
        }
    }
}

 
次のsql文を実行します.
新しいSaleDAO.JAvaファイルは、販売台数の上位3を照会する方法を記述します.
package com.souvc.json;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class SaleDAO {
    public List<Sale> findAll() throws Exception {
        List<Sale> sales = new ArrayList<Sale>();
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            conn = DBUtil.getConnection();
            stmt = conn.prepareStatement("select * from (select rownum r,"
                    + "a.* from (select * from t_sale order by qty desc) a) "
                    + "c where c.r < 4");
            rs = stmt.executeQuery();
            while (rs.next()) {
                Sale s = new Sale(rs.getInt("id"), rs.getString("prodname"), rs
                        .getInt("qty"));
                sales.add(s);
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        } finally {
            DBUtil.close(conn);
        }
        return sales;
    }
}

 
手順3:新しいActionServiceletクラス
package com.souvc.json;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

public class ActionServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();

        //       
        String uri = request.getRequestURI();
        //       
        String action = uri.substring(uri.lastIndexOf("/"), uri
                .lastIndexOf("."));

        if (action.equals("/city")) {
            String name = request.getParameter("name");
            if (name.equals("bj")) {
                City c1 = new City("  ", "hd");
                City c2 = new City("  ", "dc");
                City c3 = new City("  ", "xc");
                List<City> cs = new ArrayList<City>();
                cs.add(c1);
                cs.add(c2);
                cs.add(c3);
                JSONArray obj = JSONArray.fromObject(cs);
                String str = obj.toString();
                out.println(str);

            } else if (name.equals("sh")) {
                City c1 = new City("  ", "xh");
                City c2 = new City("  ", "ja");
                City c3 = new City("  ", "hp");
                List<City> cs = new ArrayList<City>();
                cs.add(c1);
                cs.add(c2);
                cs.add(c3);
                JSONArray obj = JSONArray.fromObject(cs);
                String str = obj.toString();
                out.println(str);
            }

        } else if (action.equals("/sale")) {
            SaleDAO dao = new SaleDAO();
            try {
                List<Sale> all = dao.findAll();
                JSONArray arry = JSONArray.fromObject(all);
                out.println(arry.toString());
            } catch (Exception e) {
                e.printStackTrace();
                throw new ServletException(e);
            }
        }
        out.close();
    }
}

 
手順4:salesを新規作成します.htmlファイル
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>sales.html</title>

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <style>
#d1 {
    width: 500px;
    height: 180px;
    background-color: #fff8dc;
    border: 1px solid red;
    margin-left: 350px;
    margin-top: 50px;
}
</style>

        <script type="text/javascript" src="js/prototype-1.6.0.3.js"></script>
        <script type="text/javascript">
        function getXmlHttpRequest(){
            var xhr = null;
            if((typeof XMLHttpRequest)!='undefined'){
                  xhr = new XMLHttpRequest();
                   }else {
                  xhr = new ActiveXObject('Microsoft.XMLHttp');
               }
               return xhr;
        }
        function f1(){
            setInterval(f2,5000);
        }
        function f2(){
            var xhr = getXmlHttpRequest();
            xhr.open('post','sale.do',true);
            xhr.setRequestHeader("Content-Type",
                "application/x-www-form-urlencoded");
            xhr.onreadystatechange=function(){
                if(xhr.readyState == 4){
                    var txt = xhr.responseText;
                    var sales = txt.evalJSON();
                    var saleInfo = '          :<br/>';
                    for(i=0;i<sales.length;i++){
                        saleInfo += '    :'
                         + sales[i].prodName + '   :' + 
                         sales[i].qty + '<br/>';
                    }
                    $('d1').innerHTML = saleInfo;
                }
            };
            xhr.send(null);
        }
    </script>
    </head>

    <body onload="f1();">
        <div id="d1"></div>
    </body>
</html>

 
手順5:結果の表示の実行
6.4完全コード
 
 
ソース:http://yunpan.cn/cQyrTefxWuHfKアクセスパスワード7 b 77