在上篇文章中,我有提到过这个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, User.class);
- for (User user : list) {
- System.out.println("test3():" + user);
- }
- }
- }
那么运行结果:
如图可视:上述是将JSON字符串转为JSON对象/数组/集合的过程,主要还是用到JSONObect和JSONArray两个对象的方法
当然使用JSONlib解析这些数据还是比较麻烦的,光jar包就要6个,下次有时间再写一些简单的工具类,这样便于开发。