最近在做一个基于JAVA Servlet的WEB应用以及对应的Anroid应用客户端的开发工作。
其中,在接口的访问和数据的传输方面使用的比较多的是使用JSON对象来操作格式化数据:在服务器端采用JSON字符串来传递数据并在WEB前端或者Android客户端使用JSON来解析接收到的数据。
首先,在JAVA中使用JSON需要引入 org.json 包, 并在程序中引入相应的JSON类:
1
2
3
|
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; |
其次,在服务器端的Servlet类中,可以使用如下方法收集数据并生成相应的JSON字符串
1
2
3
4
5
6
7
8
9
|
//声明一个Hash对象并添加数据 Map params = new HashMap(); params.put( "username" , username); params.put( "user_json" , user); //声明JSONArray对象并输入JSON字符串 JSONArray array = JSONArray.fromObject(params); put.println(array.toString()); |
在WEB前端可以通过javascript直接对JSON字符串进行解析,在Android客户端的话,需要使用JSON类来解析字符串:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//@description: 根据接收到的JSON字符串来解析字符串中所包含的数据和数据对象 //接收到的JSON字符串 String result = "[{\"username\": \"your name\", \"user_json\": {\"username\": \"your name\", \"nickname\": \"your nickname\"}}]" ; //根据字符串生成JSON对象 JSONArray resultArray = new JSONArray(result); JSONObject resultObj = resultArray.optJSONObject( 0 ); //获取数据项 String username = resultObj.getString( "username" ); //获取数据对象 JSONObject user = resultObj.getJSONObject( "user_json" ); String nickname = user.getString( "nickname" ); |
其实,主要就是涉及到以下集中数据类型之间的转换:
1. String 转换为JSON对象
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\"" + "]}" ; //转换成为JSONObject对象 JSONObject jsonObj = new JSONObject(jsonStr); //从JSONObject对象中获取数据 JavaBean bean = new JavaBean(); //根据属性名称获取int型数据; bean.setId(jsonObj.getInt( "id" )); //根据属性名获取String数据; bean.setTitle(jsonObj.getString( "title" )); //根据属性名获取JSONObject类 JSONObject config = jsonObj.getJSONObject( "config" ); bean.setWidth(config.getInt( "width" )); bean.setHeight(config.getInt( "height" )); //根据属性名获取JSONArray数组 JSONArray data = jsonObj.getJSONArray( "data" ); for ( int index = 0 , length = data.length(); index < length; index++) { //这里在org.json.JSONArray对象中居然没有找到toArray方法,求各位网友给出解决办法啊! // bean.setLanguages(String[]); } } } class JavaBean{ private int id ; private String title; private int width; private int height; private String[] languages; //这里省略了设置器和访问器 } |
2. JSON对象转换为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 { //创建JSONObject对象 JSONObject json = new JSONObject(); //向json中添加数据 json.put( "username" , "wanglihong" ); json.put( "height" , 12.5 ); json.put( "age" , 24 ); //创建JSONArray数组,并将json添加到数组 JSONArray array = new JSONArray(); array.put(json); //转换为字符串 String jsonStr = array.toString(); System.out.println(jsonStr); } |
最终输出结果为: [{"username":"wanglihong","height":12.5,"age":24}]
3. 集合转换为JSONArray对象
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集合并添加数据 List<String> list = new ArrayList<String>(); list.add( "username" ); list.add( "age" ); list.add( "sex" ); //初始化HashMap集合并添加数组 Map map = new HashMap(); map.put( "bookname" , "CSS3实战" ); map.put( "price" , 69.0 ); //初始化JSONArray对象,并添加数据 JSONArray array = new JSONArray(); array.put(list); array.put(map); //生成的JSON字符串为:[["username","age","sex"],{"price":69,"bookname":"CSS3实战"}] } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/undead/archive/2012/07/18/2594900.html