最近在做一個(gè)基于JAVA Servlet的WEB應(yīng)用以及對(duì)應(yīng)的Anroid應(yīng)用客戶端的開(kāi)發(fā)工作。
其中,在接口的訪問(wèn)和數(shù)據(jù)的傳輸方面使用的比較多的是使用JSON對(duì)象來(lái)操作格式化數(shù)據(jù):在服務(wù)器端采用JSON字符串來(lái)傳遞數(shù)據(jù)并在WEB前端或者Android客戶端使用JSON來(lái)解析接收到的數(shù)據(jù)。
首先,在JAVA中使用JSON需要引入 org.json 包, 并在程序中引入相應(yīng)的JSON類:
1
2
3
|
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; |
其次,在服務(wù)器端的Servlet類中,可以使用如下方法收集數(shù)據(jù)并生成相應(yīng)的JSON字符串
1
2
3
4
5
6
7
8
9
|
//聲明一個(gè)Hash對(duì)象并添加數(shù)據(jù) Map params = new HashMap(); params.put( "username" , username); params.put( "user_json" , user); //聲明JSONArray對(duì)象并輸入JSON字符串 JSONArray array = JSONArray.fromObject(params); put.println(array.toString()); |
在WEB前端可以通過(guò)javascript直接對(duì)JSON字符串進(jìn)行解析,在Android客戶端的話,需要使用JSON類來(lái)解析字符串:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//@description: 根據(jù)接收到的JSON字符串來(lái)解析字符串中所包含的數(shù)據(jù)和數(shù)據(jù)對(duì)象 //接收到的JSON字符串 String result = "[{\"username\": \"your name\", \"user_json\": {\"username\": \"your name\", \"nickname\": \"your nickname\"}}]" ; //根據(jù)字符串生成JSON對(duì)象 JSONArray resultArray = new JSONArray(result); JSONObject resultObj = resultArray.optJSONObject( 0 ); //獲取數(shù)據(jù)項(xiàng) String username = resultObj.getString( "username" ); //獲取數(shù)據(jù)對(duì)象 JSONObject user = resultObj.getJSONObject( "user_json" ); String nickname = user.getString( "nickname" ); |
其實(shí),主要就是涉及到以下集中數(shù)據(jù)類型之間的轉(zhuǎn)換:
1. String 轉(zhuǎn)換為JSON對(duì)象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; //別忘了添加上JSON包哦! public class StringToJSON { public static void main(String[] args) throws JSONException{ System.out.println( "abc" ); //定義JSON字符串 String jsonStr = "{\"id\": 2," + " \"title\": \"json title\", " + "\"config\": {" + "\"width\": 34," + "\"height\": 35," + "}, \"data\": [" + "\"JAVA\", \"JavaScript\", \"PHP\"" + "]}" ; //轉(zhuǎn)換成為JSONObject對(duì)象 JSONObject jsonObj = new JSONObject(jsonStr); //從JSONObject對(duì)象中獲取數(shù)據(jù) JavaBean bean = new JavaBean(); //根據(jù)屬性名稱獲取int型數(shù)據(jù); bean.setId(jsonObj.getInt( "id" )); //根據(jù)屬性名獲取String數(shù)據(jù); bean.setTitle(jsonObj.getString( "title" )); //根據(jù)屬性名獲取JSONObject類 JSONObject config = jsonObj.getJSONObject( "config" ); bean.setWidth(config.getInt( "width" )); bean.setHeight(config.getInt( "height" )); //根據(jù)屬性名獲取JSONArray數(shù)組 JSONArray data = jsonObj.getJSONArray( "data" ); for ( int index = 0 , length = data.length(); index < length; index++) { //這里在org.json.JSONArray對(duì)象中居然沒(méi)有找到toArray方法,求各位網(wǎng)友給出解決辦法啊! // bean.setLanguages(String[]); } } } class JavaBean{ private int id ; private String title; private int width; private int height; private String[] languages; //這里省略了設(shè)置器和訪問(wèn)器 } |
2. JSON對(duì)象轉(zhuǎn)換為String字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public static void main(String[] args) throws JSONException { //創(chuàng)建JSONObject對(duì)象 JSONObject json = new JSONObject(); //向json中添加數(shù)據(jù) json.put( "username" , "wanglihong" ); json.put( "height" , 12.5 ); json.put( "age" , 24 ); //創(chuàng)建JSONArray數(shù)組,并將json添加到數(shù)組 JSONArray array = new JSONArray(); array.put(json); //轉(zhuǎn)換為字符串 String jsonStr = array.toString(); System.out.println(jsonStr); } |
最終輸出結(jié)果為: [{"username":"wanglihong","height":12.5,"age":24}]
3. 集合轉(zhuǎn)換為JSONArray對(duì)象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public static void main(String[] args) throws JSONException{ //初始化ArrayList集合并添加數(shù)據(jù) List<String> list = new ArrayList<String>(); list.add( "username" ); list.add( "age" ); list.add( "sex" ); //初始化HashMap集合并添加數(shù)組 Map map = new HashMap(); map.put( "bookname" , "CSS3實(shí)戰(zhàn)" ); map.put( "price" , 69.0 ); //初始化JSONArray對(duì)象,并添加數(shù)據(jù) JSONArray array = new JSONArray(); array.put(list); array.put(map); //生成的JSON字符串為:[["username","age","sex"],{"price":69,"bookname":"CSS3實(shí)戰(zhàn)"}] } |
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://www.cnblogs.com/undead/archive/2012/07/18/2594900.html