zoukankan      html  css  js  c++  java
  • JAVA中使用JSON进行数据传递

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

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


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

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

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

    //声明一个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类来解析字符串:

    //@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对象

    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字符串

    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对象

    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实战"}]
        }
  • 相关阅读:
    高精度
    欢迎来到我的博客!
    1
    POJ 2774 求两个串的最长公共前缀 | 后缀数组
    ural1297 求最长回文子串 | 后缀数组
    洛谷 [SCOI2010]股票交易 | 单调性DP
    BZOJ 1096: [ZJOI2007]仓库建设 | 斜率优化DP
    洛谷 P2906 [USACO08OPEN]牛的街区Cow Neighborhoods | Set+并查集
    BZOJ 1010: [HNOI2008]玩具装箱toy | 单调队列优化DP
    BZOJ 1342: [Baltic2007]Sound静音问题 | 单调队列维护的好题
  • 原文地址:https://www.cnblogs.com/wqsbk/p/5311086.html
Copyright © 2011-2022 走看看