迁移时间--2017年5月27日08:16:43
五、java数据类型之JOSN
需要导入jar包
UpdateTime--2017年9月5日17:30:10
使用JSON数据格式,共有4种方式,这里介绍常用的两种方式及用法
第一种方式:
commons-beanutils-1.8.3.jar、commons-collections-3.2.1.jar、commons-lang-2.6.jar、commons-logging-1.1.3.jar、ezmorph-1.0.6.jar和json-lib-2.4-jdk15.jar
java类需要导入:
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
第二种方式:
json-20160810.jar
java类需要导入:
import org.json.JSONArray;
import org.json.JSONObject;
(一)数据格式
格式:{"key":value,"key:value,...}
{"operation":"测试","errormsg":"","msg":"操作成功!"}
(二)初始化
(三)常用操作
5.3.1 增、改、删
// 添加指定元素(添加)
json.put("key", value);
// 修改指定元素(修改)
json.put("key", value2);
// 移除掉指定元素(删除)
json.remove("key");
// 获取指定元素(取值)
json.get("key");
(四)其它用法
格式转换
5.5.1 Bean(javaBean)转换成JSONObject(javaBean-->JSONObject)
JSONObject jsonObject =JSONObject.fromObject(new JsonBean());
5.5.2 json数组形式的字符串转换成JSONArray(json数组形式的字符串-->JSONArray)
JSONArray jsonArray3 =JSONArray.fromObject("['json','is','easy']" );
UpdateTime--2016年12月26日14:16:24
5.5.4 Map转JSONObject(Map-->JSONObject)
5.5.5 JSONArray转换成List(JSONArray-->List)
使用第一种方式
// 将JSONArray转换成List
List<Map<String, Object>> transferList = JSONArray.toList(ja, new HashMap<String, Object>(), new JsonConfig());
使用第二种方式
// 将JSONArray转换成List
List<Object> transferList = ja.toList();
5.5.6 List转JSONArray(List-->JSONArray)
使用第一种方式
// 将List转换成JSONArray
JSONArray ja = JSONArray.fromObject(listMapData);
使用第二种方式
// 将List转换成JSONArray
JSONArray ja = new JSONArray(listMapData);
举例:
JSONObject与Map间的相互转化及JSONArray与List间的相互转化
使用第一种方式实现
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
// 声明一个Map对象并指定其大小
Map<String, Object> mapData = new HashMap<String, Object>(3);
mapData.put("msg", "操作成功!");
mapData.put("errormsg", "");
mapData.put("operation", "测试");
// 将Map转换成JSONObject
JSONObject jo = new JSONObject(mapData);
System.out.println(jo);// {"operation":"测试","errormsg":"","msg":"操作成功!"}
// JSONObject转Map
Map<String, Object> transferMap = jo.toMap();
System.out.println(transferMap);// {operation=测试, errormsg=, msg=操作成功!}
List<Map<String, Object>> listMapData = new ArrayList<Map<String, Object>>();
listMapData.add(mapData);
System.out.println(listMapData.toString());// [{operation=测试, msg=操作成功!, errormsg=}]
// 将List转换成JSONArray
JSONArray ja = new JSONArray(listMapData);
System.out.println(ja);// [{"operation":"测试","errormsg":"","msg":"操作成功!"}]
// 将JSONArray转换成List
List<Object> transferList = ja.toList();
System.out.println(transferList);// [{operation=测试, errormsg=, msg=操作成功!}]
使用第二种方式实现
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONObject;
Map<String, Object> mapData = new HashMap<String, Object>(3);
mapData.put("msg", "操作成功!");
mapData.put("errormsg", "");
mapData.put("operation", "测试");
// 将Map转换成JSONObject
JSONObject jo = JSONObject.fromObject(mapData);
System.out.println(jo);// {"operation":"测试","errormsg":"","msg":"操作成功!"}
// JSONObject转Map:没有现成的方法,需要自己封装
Map<String, Object> transferMap = josn2Map(jo);
System.out.println(transferMap);// {operation=测试, errormsg=, msg=操作成功!}
List<Map<String, Object>> listMapData = new ArrayList<Map<String, Object>>();
listMapData.add(mapData);
System.out.println(listMapData.toString());// [{operation=测试, msg=操作成功!, errormsg=}]
// 将List转换成JSONArray
JSONArray ja = JSONArray.fromObject(listMapData);
System.out.println(ja);// [{"operation":"测试","errormsg":"","msg":"操作成功!"}]
// 将JSONArray转换成List
List<Map<String, Object>> transferList = JSONArray.toList(ja, new HashMap<String, Object>(), new JsonConfig());
System.out.println(transferList);// [{operation=测试, errormsg=, msg=操作成功!}]
5.3.6 JSONObject转换成String(JSONObject-->String)
String resultData= jsonObject.toString();// {"operation":"测试","errormsg":"","msg":"操作成功!"}
说明:
虽然从输入结果看不出变化,但是实际上已经将JSON对象转换成了json字符串;
当数据传输的格式不支持json传输时,可以考虑将其转化成字符串。
5.3.7 json转换成指定格式的字符串
/**
* 将JSONObject转换成字符串
* @description 转换格式:字段名+"|"+字段值+"$"
* @param jsonObject
* json对象
* @return 字符串
*/
private String JSONObjectToString(JSONObject jsonObject) {
String str = "";
Iterator iterator = jsonObject.entrySet().iterator();
if (iterator.hasNext()) {
Entry<String, Object> entry = (Entry<String, Object>) iterator.next();
str += entry.getKey() + "|" + entry.getValue() + "$";
}
return str;
}
格式转换出现的问题:
Map转换成String后,不能够直接转成JSON对象
举例:
String cookieMapStr = "{userPassword=ABCD_XYHYXKJ, userId=1, ForganizeName=%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD, userName=%E8%B6%85%E7%BA%A7%E7%AE%A1%E7%90%86%E5%91%98}";
由Map转换成String后,不能够直接转成JSON对象,否则会报错
JSONObject jsonCookie = JSONObject.fromObject(cookieMapStr);//这种方式是不对的
(六) 进一步封装
(七)功能实现
作者:Marydon