服务端java处理json数据_服务端提供的JSON数据接口与用户端接收解析JSON数据

首先来了解下JSON格式解析

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 var testJson = {

2 "Name" : "奥巴马" ,

3 "ByName" : ["小奥","小巴","小马"],

4 "Education" : {

5 "GradeSchool" : "华盛顿第一小学",

6 "MiddleSchool" : ["华盛顿第一初中" , "华盛顿第一高中"],

7 "University" : {

8 "Name" : "哈佛大学",

9 "Specialty" : ["软件工程","会计"]

10 }

11 }

12 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

变量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里面的内容和预料的一样,通过下面这幅图你应该可琢磨出很多东西来吧

c22fec0673165fb1e73d0e08f7b4825f.png

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

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

通过Servlet创建服务端JSON数据

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

package JsonManager;

importjava.io.IOException;

importjava.io.PrintWriter;

importjava.util.HashMap;

importjava.util.Map;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importnet.sf.json.JSONObject;

/**

* JSONObject 创建一个JSON对象并out.write();

* @author Dana·Li

*/

public class JsonServlet extendsHttpServlet {

private static final long serialVersionUID =1L;

public voiddoGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doPost(request, response);

}

@SuppressWarnings({ "rawtypes", "unchecked"})

public voiddoPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

response.setCharacterEncoding("UTF-8"); //解决中文乱码问题

PrintWriter out =response.getWriter();

Map map = newHashMap();

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();

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

a4e83144268084eb1d43590f3ebacb40.png

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;

importjava.net.URL;

importjava.net.URLConnection;

/**

* 接收服务端Json数据

* @author Dana·Li

*/

public classGetJsonInterfaceInfo{

private static String urlPath="http://192.168.0.129:8080/JSONInterface/JsonServlet";

/**

* @param args

* @throws IOException

*/

public static voidmain(String[] args) throws IOException {

//ServerFactory.getServer(8080).start();

//列出原始数据

StringBuilder json = newStringBuilder();

URL oracle = newURL(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());

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

53ae0d0dbfe1778e36d9e484084a1572.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值