• 服务端提供的JSON数据接口与用户端接收解析JSON数据


    JSON格式的服务接口:http://www.cnblogs.com/visec479/articles/4118338.html

    首先来了解下JSON格式解析

    json结构的格式就是若干个 键/值(key, value) 对的集合,该集合可以理解为字典(Dictionary),每个 键/值 对可以理解成一个对象(Object)。 键/值 对中的 键(key) 一般是 一个string,值(value)可以是string、double、int等基本类型,也可以嵌套一个 键/值 对,也可以是一个数组,数组里面的数据的类型可以是基本类型,或者 键/值 对。可以看出 键/值 本来没什么,只是嵌套得多了就会觉得混乱,下面举个具体的例子来说明。注:该代码只是用来举例说明,并不能正确运行。

    复制代码
     1             var testJson = {                      
    2 "Name" : "奥巴马" ,
    3 "ByName" : ["小奥","小巴","小马"],
    4 "Education" : {
    5 "GradeSchool" : "华盛顿第一小学",
    6 "MiddleSchool" : ["华盛顿第一初中" , "华盛顿第一高中"],
    7 "University" : {
    8 "Name" : "哈佛大学",
    9 "Specialty" : ["软件工程","会计"]
    10 }
    11 }
    12 }
    复制代码

    变量testJson就是一个json对象,testJson对象包括三个 键/值 对。

    第一个 键/值 对: 键(key)是"Name“ ,其对应的值(value)是 "奥巴马" ,即 testJson["Name"]  == "奥巴马"

    第二个 键/值 对: 键 是 "ByName" ,值是一个数组,是一个string集合。有必要的话,数组里面的元素也可以是 键/值 对。

    第三个 键/值 对: 键 是 "Education",值是一个 Json对像,该json对象包括三个 键/值 对,这就是嵌套了。。。

    总结:json对象就是若干个 键/值 对的集合,键是string,值可以是基本类型,或者嵌套一个Json对象,或者是一个数组(数组里的元素可以是基本类型,也可以是json对象,可以继续嵌套)。

    获取名字:testJson["Name"]

    获取第一个别名:testJson["ByName"][0] 。testJson的 键"ByName" 对应的值 是一个string数组 

    获取小学名字: testJson["Education"]["GradeSchool"] , 获取大学主修专业:testJson["Education"]["University"]["Specialty"][0]

     

    下面举个实例:

    定义一个符合json格式要求的字符串:

    string testJson = "{"Name" : "奥巴马","ByName" : ["小奥","小巴","小马"],"Education":{"GradeSchool" : "华盛顿第一小学","MiddleSchool" : ["华盛顿第一初中" , "华盛顿第一高中"], "University" :{ "Name" : "哈佛大学", "Specialty" : ["软件工程","会计"]}}}";

    然后需要用该字符串作为参数new 一个 JsonObject对象。微软自带的类库 System.Json ,然后添加命名空间 using System.Json;

    主要代码就一句:JsonObject js = JsonObject.Parse(testJson); 用字符串testJson 作为参数new 一个 JsonObject 对象。通过监视我们可以看到js里面的内容和预料的一样,通过下面这幅图你应该可琢磨出很多东西来吧

     

    额外插一句:js["Education"]["University"]["Specialty"] 的内容是 {[  "软件工程",  "会计"]},

    但js["Education"]["University"]["Specialty"].Contains( "软件工程") 的值 是false。原因自己琢磨

     

    通过Servlet创建服务端JSON数据

    服务端提供JSON数据接口:http://192.168.0.129:8080/JSONInterface/JsonServlet

    package JsonManager;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.HashMap;
    import java.util.Map;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import net.sf.json.JSONObject;
    /**
     * JSONObject 创建一个JSON对象并out.write();
     * @author Dana·Li
     */
    public class JsonServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            this.doPost(request, response);
        }
        @SuppressWarnings({ "rawtypes", "unchecked" })
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            response.setContentType("text/html");
            response.setCharacterEncoding("UTF-8");      //解决中文乱码问题
    
            PrintWriter out = response.getWriter();
            Map map = new HashMap(); 
    
            map.put("name", "Dana、Li"); 
            map.put("age", new Integer(22)); 
            map.put("Provinces", new String("广东省")); 
            map.put("citiy", new String("珠海市")); 
            map.put("Master", new String("C、C++、Linux、Java"));
            JSONObject json = JSONObject.fromObject(map); 
            
            out.write(json.toString());
            out.flush();
            out.close();
        }
    
    }

    开启服务查看是否已经开启~

    客户端调用接口解析JSON数据

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.net.URLConnection;
    /**
     * 接收服务端Json数据
     * @author Dana·Li
     */
    public class GetJsonInterfaceInfo{
        private static String urlPath="http://192.168.0.129:8080/JSONInterface/JsonServlet";
        /**
         * @param args
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            //ServerFactory.getServer(8080).start();
            //列出原始数据
            StringBuilder json = new StringBuilder();   
            
            
            URL oracle = new URL(GetJsonInterfaceInfo.urlPath); 
            URLConnection yc = oracle.openConnection(); 
            BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(),"UTF-8")); 
            String inputLine = null; 
            while ( (inputLine = in.readLine()) != null){ 
                json.append(inputLine); 
            } 
            in.close(); 
            String Strjson=json.toString();
            System.out.println("原始数据:");
            System.out.println(Strjson.toString()); 
        }
    
    }

    本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须且在文章页面明显位置给出原文链接Dana、Li(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请留言或加Q群!
  • 相关阅读:
    异常之*** buffer overflow detected ***
    多媒体开发之视频回放---dm642 做rtsp 视频回放功能
    理财---炒股之kdj
    多媒体开发之rtp 打包发流--- 从h264中获取分辨率
    多媒体开发之rtsp 实现rtsp over tcp/http/udp---rtsp发送
    tomcat 简介
    tomcat 的安装
    rsync + inotify-tools实现文件的实时同步
    python 生成器
    ansible 常用模块
  • 原文地址:https://www.cnblogs.com/visec479/p/4118323.html
Copyright © 2020-2023  润新知