迁移时间--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":"操作成功!"}

java JSON_DATAFORMAT

java JSON_DATAFORMAT_02

java JSON_java_03

(二)初始化

  (三)常用操作

    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