Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1087|回复: 0

[默认分类] JAVA中使用JSON进行数据传递

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-6 12:30:39 | 显示全部楼层 |阅读模式
    最近在做一个基于java Servlet的WEB应用以及对应的Anroid应用客户端的开发工作。
    其中,在接口的访问和数据的传输方面使用的比较多的是使用JSON对象来操作格式化数据:在服务器端采用JSON字符串来传递数据并在web前端或者Android客户端使用JSON来解析接收到的数据。

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

    1. 1 import org.json.JSONArray;
    2. 2 import org.json.JSONException;
    3. 3 import org.json.JSONObject;
    复制代码


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

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


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

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


    其实,主要就是涉及到以下集中数据类型之间的转换:
    1. String 转换为JSON对象

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


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

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


    最终输出结果为: [{"username":"wanglihong","height":12.5,"age":24}]  
    3. 集合转换为JSONArray对象

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


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-24 05:20 , Processed in 0.323224 second(s), 36 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表