json在服务器与客户端之间传输的一篇文章
来源:互联网 发布:被爆菊 知乎 编辑:程序博客网 时间:2024/04/30 17:32
首先来了解下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()); }}
JSON格式解析转:http://www.cnblogs.com/zouzf/archive/2012/03/31/2426646.html
- json在服务器与客户端之间传输的一篇文章
- 直接在服务器与客户端之间传输对象
- 三层中如何在服务器与客户端之间传输自定义的'Record'类型数据的例子
- 服务器与客户端之间的远程图片传输
- 使用SecureCRT软件在客户端与服务器之间进行文件传输(不能传输文件夹)
- Android客户端与服务端(jsp)之间json的传输与解析【附效果图附源码】
- 实现客户端与服务端之间传输json数据
- Django与ajax之间的json传输
- ActiveMQ学习笔记01 - 客户端与服务器之间的传输连接
- C++利用socket的客户端和服务器之间传输文件
- Android客户端与服务器之间传递json数据
- 【Skynet】使用skynet在服务器与客户端间传输文件
- Android客户端与服务器之间的通信
- mac 本地文件与服务器Linux文件之间的相互传输
- wcf 客户端与服务器之间在传递DataTable问题
- 使用sftp在客户端与服务器之间进行文件传输
- Android客户端与服务器HTTP交互,数据以json格式传输
- SecureCRT的SFTP在Windows与Linux之间传输文件
- 游戏服务器笔记
- MySQL-视图
- 【Listener】利用监听器Listener以MVC的思想通过JSP+Servlet+JDBC完成在线用户列表的输出
- Read N Characters Given Read4
- 转载:Android开发相关的Blog推荐——跟随大神的脚步才能成长为大神
- json在服务器与客户端之间传输的一篇文章
- 工欲善其事必先利其器—成绩登统系统
- 基础总结篇之二:Activity的四种launchMode
- jquery返回json的标准格式
- Python编程基础之五序列:字符串、列表和元组
- flex 和 bison 的计算机
- vs2010下C++调用lib或dll文件
- 关于java用jni调用 dll动态库Can't find dependent libraries错误的解决
- cdc 的部署 同步模式