• JAVA中使用JSON进行数据传递


    最近在做一个基于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字符串

    //声明一个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实战"}]
        }
  • 相关阅读:
    core.net 创建coreclass 项目出现一些问题
    【BZOJ4144】[AMPPZ2014]Petrol 最短路+离线+最小生成树
    【BZOJ4774/4006】修路/[JLOI2015]管道连接 斯坦纳树
    【BZOJ2595】[Wc2008]游览计划 斯坦纳树
    【BZOJ4149】[AMPPZ2014]Global Warming 单调栈+RMQ+二分
    【BZOJ4764】弹飞大爷 LCT
    【BZOJ3529】[Sdoi2014]数表 莫比乌斯反演+树状数组
    【BZOJ5008】方师傅的房子 三角剖分
    【BZOJ4282】慎二的随机数列 乱搞
    【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树
  • 原文地址:https://www.cnblogs.com/scarecrow-blog/p/4962136.html
Copyright © 2020-2023  润新知