最近在做一个基于JAVA Servlet的WEB应用以及对应的Anroid应用客户端的开发工作。

其中,在接口的访问和数据的传输方面使用的比较多的是使用JSON对象来操作格式化数据:在服务器端采用JSON字符串来传递数据并在WEB前端或者Android客户端使用JSON来解析接收到的数据。

首先,在JAVA中使用JSON需要引入 org.json 包(点击 这里 可以下载相应的JAR包!), 并在程序中引入相应的JSON类:

  1. import org.json.JSONArray;
  2. import org.json.JSONException;
  3. import org.json.JSONObject;

其次,在服务器端的Servlet类中,可以使用如下方法收集数据并生成相应的JSON字符串

  1. //声明一个Hash对象并添加数据
  2. Map params = new HashMap();
  3.  
  4. params.put("username", username);
  5. params.put("user_json", user);
  6.  
  7. //声明JSONArray对象并输入JSON字符串
  8. JSONArray array = JSONArray.fromObject(params);
  9. put.println(array.toString());

在WEB前端可以通过javascript直接对JSON字符串进行解析,在Android客户端的话,需要使用JSON类来解析字符串:

  1. //@description: 根据接收到的JSON字符串来解析字符串中所包含的数据和数据对象
  2.  
  3. //接收到的JSON字符串
  4. String result = "[{\"username\": \"your name\", \"user_json\": {\"username\": \"your name\", \"nickname\": \"your nickname\"}}]";
  5.  
  6. //根据字符串生成JSON对象
  7. JSONArray resultArray = new JSONArray(result);
  8. JSONObject resultObj = resultArray.optJSONObject(0);
  9.  
  10. //获取数据项
  11. String username = resultObj.getString("username");
  12.  
  13. //获取数据对象
  14. JSONObject user = resultObj.getJSONObject("user_json");
  15. String nickname = user.getString("nickname");

其实,主要就是涉及到以下集中数据类型之间的转换:

1. String 转换为JSON对象

  1. import org.json.JSONArray;
  2. import org.json.JSONException;
  3. import org.json.JSONObject;
  4.  
  5. //别忘了添加上JSON包哦!
  6. public class StringToJSON {
  7. public static void main(String[] args) throws JSONException{
  8.  
  9. System.out.println("abc");
  10. //定义JSON字符串
  11. String jsonStr = "{\"id\": 2," +
  12. " \"title\": \"json title\", " +
  13. "\"config\": {" +
  14. "\"width\": 34," +
  15. "\"height\": 35," +
  16. "}, \"data\": [" +
  17. "\"JAVA\", \"JavaScript\", \"PHP\"" +
  18. "]}";
  19.  
  20. //转换成为JSONObject对象
  21. JSONObject jsonObj = new JSONObject(jsonStr);
  22.  
  23. //从JSONObject对象中获取数据
  24. JavaBean bean = new JavaBean();
  25.  
  26. //根据属性名称获取int型数据;
  27. bean.setId(jsonObj.getInt("id"));
  28.  
  29. //根据属性名获取String数据;
  30. bean.setTitle(jsonObj.getString("title"));
  31.  
  32. //根据属性名获取JSONObject类
  33. JSONObject config = jsonObj.getJSONObject("config");
  34. bean.setWidth(config.getInt("width"));
  35. bean.setHeight(config.getInt("height"));
  36.  
  37. //根据属性名获取JSONArray数组
  38. JSONArray data = jsonObj.getJSONArray("data");
  39. for(int index = 0, length = data.length(); index < length; index++) {
  40. //这里在org.json.JSONArray对象中居然没有找到toArray方法,求各位网友给出解决办法啊!
  41. // bean.setLanguages(String[]);
  42. }
  43. }
  44. }
  45.  
  46. class JavaBean{
  47. private int id ;
  48. private String title;
  49. private int width;
  50. private int height;
  51. private String[] languages;
  52.  
  53. //这里省略了设置器和访问器
  54. }

2. JSON对象转换为String字符串

  1. public static void main(String[] args) throws JSONException {
  2.  
  3. //创建JSONObject对象
  4. JSONObject json = new JSONObject();
  5.  
  6. //向json中添加数据
  7. json.put("username", "wanglihong");
  8. json.put("height", 12.5);
  9. json.put("age", 24);
  10.  
  11. //创建JSONArray数组,并将json添加到数组
  12. JSONArray array = new JSONArray();
  13. array.put(json);
  14.  
  15. //转换为字符串
  16. String jsonStr = array.toString();
  17.  
  18. System.out.println(jsonStr);
  19. }

最终输出结果为: [{"username":"wanglihong","height":12.5,"age":24}]

3. 集合转换为JSONArray对象

  1. public static void main(String[] args)throws JSONException{
  2. //初始化ArrayList集合并添加数据
  3. List<String> list = new ArrayList<String>();
  4. list.add("username");
  5. list.add("age");
  6. list.add("sex");
  7.  
  8. //初始化HashMap集合并添加数组
  9. Map map = new HashMap();
  10. map.put("bookname", "CSS3实战");
  11. map.put("price", 69.0);
  12.  
  13. //初始化JSONArray对象,并添加数据
  14. JSONArray array = new JSONArray();
  15. array.put(list);
  16. array.put(map);
  17.  
  18. //生成的JSON字符串为:[["username","age","sex"],{"price":69,"bookname":"CSS3实战"}]
  19. }

JAVA中使用JSON进行数据传递的更多相关文章

  1. 转载:JAVA中使用JSON进行数据传递

    转载网址:http://www.cnblogs.com/undead/archive/2012/07/18/2594900.html 最近在做一个基于JAVA Servlet的WEB应用以及对应的An ...

  2. JSON(三)——java中对于JSON格式数据的解析之json-lib与jackson

    java中对于JSON格式数据的操作,主要是json格式字符串与JavaBean之间的相互转换.java中能够解析JSON格式数据的框架有很多,比如json-lib,jackson,阿里巴巴的fast ...

  3. fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map

    作者:buster2014 推荐:长安散人 fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map JSON字符串与Java对象的转换 1.将Java对象或Java ...

  4. Java中哪个JSON库的解析速度是最快的?

    JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考 了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上 ...

  5. SpringMVC中使用Json传数据

    在web项目中使用Json进行数据的传输是非常常见且有用的,在这里介绍下在SpringMVC中使用Json传数据的一种方法,在我的使用中,主要包括下面四个部分(我个人喜好使用maven这类型工具进行项 ...

  6. fastJson java后台转换json格式数据

    什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...

  7. 在JSP页面中输出JSON格式数据

    JSON-taglib是一套使在JSP页面中输出JSON格式数据的标签库. JSON-taglib主页: http://json-taglib.sourceforge.net/index.html J ...

  8. Java中double类型的数据精确到小数点后两位

    Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...

  9. http中使用json封装数据的性能测试

    http中使用json封装数据的性能测试     一个项目使用json封装数据,接口例如:   客户端发送:   POST /list.do HTTP/1.1   Host: zoomi.com.cn ...

随机推荐

  1. SCU3033 Destroying a Painting(最小费用最大流)

    题目大概说有一个有n*m个格子的画板,画板上每个格子都有颜色,现在要把所有格子的颜色改成红.绿或者蓝,改变的代价是二者RGB值的曼哈顿距离,还要求红绿蓝格子个数的最大值和最小值要尽可能接近,问最少的代 ...

  2. POJ2226 Muddy Fields(二分图最小点覆盖集)

    题目给张R×C的地图,地图上*表示泥地..表示草地,问最少要几块宽1长任意木板才能盖住所有泥地,木板可以重合但不能盖住草地. 把所有行和列连续的泥地(可以放一块木板铺满的)看作点且行和列连续泥地分别作 ...

  3. Real Adaboost总结

    Real Adaboost分类器是对经典Adaboost分类器的扩展和提升,经典Adaboost分类器的每个弱分类器仅输出{1,0}或{+1,-1},分类能力较弱,Real Adaboost的每个弱分 ...

  4. html页面元素加载顺序

    一般来说,添加背景图片有三种办法: 直接写在标签的style里面,如: <div style="background-image:url('images/Css.JPG')" ...

  5. php 即使客户端或者服务器断开(如关掉浏览器)脚本也可以继续执行

    <?php ignore_user_abort(); // run script in background set_time_limit(0); // run script forever $ ...

  6. sqlmap我常用到的几个参数

    -r "抓的包存放的文件路径.txt"    一般方便带cookie与session类型 --dbms Oracle/Mysql     指定数据库类型 指定变量注入点变量:在变量 ...

  7. C# - Try catch 中 使用 End()

    如果在Try中执行End()会被扑捉到.这通常并不是我想要捕捉的错误.而是结束页面的手段.可通过调整为以下代码结构修复 //this.DbHelp.BeginTransaction(); //设置回滚 ...

  8. Html - a标签如何包裹Div

    a标签如何包裹Div? 其实应该将思路转变为将a标签作为一个遮罩来覆盖div. 做法是将a标签放置在该div下,通过将div进行相对定位[position:relative] 将a标签进行绝对定位[p ...

  9. Nova相关命令收集

    1. nova list 2. sudo nova-manage service list 8. 创建/删除浮动IP池 nova floating-ip-bulk-create 192.168.0.2 ...

  10. 《GK101任意波发生器》升级固件发布(版本:1.0.1build803)

    一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.1.build803 编译日期:2014-08-06 ====================================== 二. ...