您的位置:首页 > 编程语言 > Java开发

JSON(jsonlib)与java对象的相互转换

2016-12-16 00:54 288 查看
在上篇文章中,我有提到过这个JSON技术,目前大多接口也已经开始使用JSON进行传输数据。

接下来那就简单介绍一下

概念:JSON(JavaScript Object Notation)是一种轻量级的数据交互格式。它基于标准的Javascript的一个子集,是一个JS对象或数组结构的字符串

语法格式:例:对象{“username”:"admin", "password":"123"},数组[{“username”:"admin", "password":"123"}, {“username”:"tom", "password":"123"}]。简单来说:

数据在键值对中,数据由逗号分隔,花括号保存对象,方括号保存数组

数据类型:JSON有三种数据类型。1.单个数据(number, String,boolean,null)四种数据类型,2.数组,3.对象

JSON工具有很多,GSON,fastJson,JSONLIB等,那么接下来就用JSONLIB进行操作(前提是先要下载JSONLIB的jar包,并且导入到工程中)

JSONLIB中的API:

JSONObject:主要用于将对象和MAP集合转成JSON

JSONArray:主要用于将数组和List集合转成JSON

一:将java对象转为JSON字符串

演示过程中:1.使用用户类作为POJO 2.使用c3p0数据库连接池从数据库中查询结果,3使用JUnit4进行测试

用户类:

package com.wanghang.domain;  

  

/** 

 * 用户实体类 

 *  

 * @author Hang.W 

 * @version 1.0,2016-12-15 00:10:34 

 */  

public class User {  

      

    /** 用户id */  

    private String id;  

  

    /** 用户名 */  

    private String username;  

  

    /** 用户密码 */  

    private String password;  

  

    public User() {  

        super();  

    }  

  

    public User(String id, String username, String password) {  

        super();  

        this.id = id;  

        this.username = username;  

        this.password = password;  

    }  

  

    public String getId() {  

        return id;  

    }  

  

    public void setId(String id) {  

        this.id = id;  

    }  

  

    public String getUsername() {  

        return username;  

    }  

  

    public void setUsername(String username) {  

        this.username = username;  

    }  

  

    public String getPassword() {  

        return password;  

    }  

  

    public void setPassword(String password) {  

        this.password = password;  

    }  

  

    @Override  

    public String toString() {  

        return "User [id=" + id + ", username=" + username + ", password="  

                + password + "]";  

    }  

  

}  

使用JSONLib工具进行操作:

package com.wanghang.test;  

  

import java.util.ArrayList;  

import java.util.HashMap;  

import net.sf.json.JSONArray;  

import net.sf.json.JSONObject;  

import net.sf.json.JsonConfig;  

import org.junit.Test;  

import com.wanghang.domain.User;  

  

/** 

 * Json_lib开发包 

 * * JSONLIB:主要用于将对象和MAP集合转换成JSON 

 * * JSONARRAY:主要用于将数组和List集合转成JSON 

 *  

 * @author Hang.W 

 * @version 1.0, 2016-12-15 00:15:07 

 */  

public class Json_libTest {  

  

    @Test  

    /** 

     * 将对象转成 Json 

     * {"id":"1","password":"123","username":"张三"} 

     */  

    public void test() {  

        User user = new User("1", "张三", "123");  

        // 将对象和Map集合转换成JSon使用JSONObject  

        JSONObject jsonObject = JSONObject.fromObject(user);  

        System.out.println(jsonObject);  

    }  

      

    @Test  

    /** 

     * 将List集合转换成Json 

     */  

    public void test2() {  

        ArrayList<User> list = new ArrayList<User>();  

        list.add(new User("1", "张三", "123"));  

        list.add(new User("2", "李四", "124"));  

        // 将数组和List集合转换成Json使用JSONArray对象  

        JSONArray jsonArray = JSONArray.fromObject(list);  

        System.out.println(jsonArray);  

    }  

      

    @Test  

    /** 

     * 将数组转换成Json 

     */  

    public void test3() {  

        User[] arr = new User[2];  

        arr[0] = new User("1", "张三", "123");  

        arr[1] = new User("2", "李四", "124");  

        // 将数组转换成Json使用JSONArray对象  

        JSONArray jsonArray = JSONArray.fromObject(arr);  

        System.out.println(jsonArray);  

    }  

      

    @Test  

    /** 

     * 将map集合转换成Json 

     */  

    public void test4() {  

        HashMap<String, User> map = new HashMap<String, User>();  

        map.put("001", new User("1", "张三", "123"));  

        map.put("002", new User("2", "李四", "124"));  

        // 将map集合转换为Json用JSONObject对象  

        JSONObject jsonObject = JSONObject.fromObject(map);  

        System.out.println(jsonObject);  

    }  

      

    @Test  

    /** 

     * 将list集合转换成Json,并且去除多余的id属性 

     */  

    public void test5() {  

        ArrayList<User> list = new ArrayList<User>();  

        list.add(new User("1", "张三", "123"));  

        list.add(new User("2", "李四", "124"));  

        // 去除id属性  

        JsonConfig jsonConfig = new JsonConfig();  

        // 创建jsonConfig去除id多余属性  

        jsonConfig.setExcludes(new String[]{"id"});  

        JSONArray jsonArray = JSONArray.fromObject(list, jsonConfig);  

        System.out.println(jsonArray);  

    }  

}  

演示结果:



可以看出来都是JSON格式的字符串,那么上述就是将java对象转换为JSON格式的字符串,

当我们与页面进行数据交互时,我们要将这些转换后的JSON字符串传到页面中,然后用var data = eval("("+JSON字符串+")");用eval函数进行解析成js对象或数组

二:进行JSON字符串转换为Java对象的操作

package com.wanghang.test;  

  

import java.util.HashMap;  

import java.util.List;  

import net.sf.json.JSONArray;  

import net.sf.json.JSONObject;  

import org.junit.Test;  

import com.wanghang.domain.User;  

  

/** 

 * Json_lib开发包 

 * * JSONLIB:主要用于将对象和MAP集合转换成JSON 

 * * JSONARRAY:主要用于将数组和List集合转成JSON 

 *  

 * @author Hang.W 

 * @version 1.0, 2016-12-17 00:25:43 

 */  

public class Json_libTest2 {  

  

    @Test  

    /** 

     * 将JSON字符串转为java对象(user)  

     */  

    public void test() {  

        // 参数{"id":"1","password":"123","username":"张三"}是由上边java对象转为JSON字符串生成的,但是需要转义  

        String string = "{\"id\": \"1\", \"password\": \"123\", \"username\": \"张三\"}";  

          

        // 将普通字符串类型转为JSON字符串类型  

        JSONObject jsonObject = JSONObject.fromObject(string);  

          

        // 将JSON字符串进行转换User对象操作  

        User user = (User) JSONObject.toBean(jsonObject, User.class);  

        System.out.println("test():" + user);  

    }  

      

    @Test  

    /** 

     * 将JSON字符串数组转换为java对象(user)数组 

     */  

    public void test2() {  

        // 参数[{"id":"1","password":"123","username":"张三"},{"id":"2","password":"124","username":"李四"}]是由上边java对象转为JSON字符串生成的,完全原创  

        String string = "[{\"id\": \"1\", \"password\": \"123\", \"username\": \"张三\"}, {\"id\": \"2\", \"password\": \"124\", \"username\": \"李四\"}]";  

          

        // 使用JSONArray将普通字符串数组类型转为JSONArray字符串数组类型  

        JSONArray jsonArray = JSONArray.fromObject(string);  

          

        //   

        for (Object object : jsonArray) {  

            // 将JSON数组中的每一个JSON字符串转为JSON字符串对象  

            JSONObject jsonObject = JSONObject.fromObject(object);  

              

            // 再将JSON字符串对象进行转换User对象操作  

            User user = (User) JSONObject.toBean(jsonObject, User.class);  

            System.out.println("test2():" + user);  

        }  

    }  

      

    @Test  

    /** 

     * 将JSON字符串数组转换为java对象(user)List集合 

     */  

    public void test3() {  

        // 参数[{"id":"1","password":"123","username":"张三"},{"id":"2","password":"124","username":"李四"}]是由上边java对象转为JSON字符串生成的

        String string = "[{\"id\": \"1\", \"password\": \"123\", \"username\": \"张三\"}, {\"id\": \"2\", \"password\": \"124\", \"username\": \"李四\"}]";  

          

        // 将字符串数组转换为JSONList格式  

        JSONArray jsonArray = JSONArray.fromObject(string);  

          

        // 直接将JSONArray(JSONList)转换为List集合  

        List<User> list = (List<User>) JSONArray.toList(jsonArray, Use
ac9f
r.class);  

          

        for (User user : list) {  

            System.out.println("test3():" + user);  

        }  

    }  

      

}  

那么运行结果:



如图可视:上述是将JSON字符串转为JSON对象/数组/集合的过程,主要还是用到JSONObect和JSONArray两个对象的方法

当然使用JSONlib解析这些数据还是比较麻烦的,光jar包就要6个,下次有时间再写一些简单的工具类,这样便于开发。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: