在进行项目开发过程中和其他平台进行对接,对方平台接口中的key在对接过程中出现,key大小写转变的问题,所以开发工具类,防止出现这样的问题。
下面是具体代码实现:
package com.jane.framework.web.util;
import java.util.Iterator;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
* 修改JSON的key为小写或者大写
*
* @Title ModifyJsonKeyToUpperUtil
* @Desripction
* @Date 2019-3-7 下午3:05:48
* @Package com.jane.framework.web.util
*/
@SuppressWarnings("rawtypes")
public class ModifyJsonKeyUtil {
public static final String STRING_KEY = "String";
public static final String JSONOBJECT_KEY = "JSONObject";
public static final String JSONARRAY_KEY = "JSONArray";
/**
* 修改json的key为大写或者小写
*
* @Description
* @Date 2019-3-7下午3:07:32
* @param jsonObject
* @param changeMode 当值为true时,说明是转小写,false为转大写
* @return
* @throws
*/
public static JSONObject transferJsonKey(JSONObject jsonObject, boolean transferMode) {
JSONObject object = new JSONObject();
Iterator iterator = jsonObject.keys();
while (iterator.hasNext()) {
String jsonKey = (String) iterator.next();
Object valueObject = jsonObject.get(jsonKey);
if (transferMode) {
jsonKey = jsonKey.toLowerCase();
} else {
jsonKey = jsonKey.toUpperCase();
}
if (valueObject.getClass().toString().endsWith(STRING_KEY)) {
object.accumulate(jsonKey, valueObject);
} else if (valueObject.getClass().toString().endsWith(JSONOBJECT_KEY)) {
JSONObject checkObject = JSONObject.fromObject(valueObject);
// 当值为null时,valueObject还是JSONObject对象,判空是不成立的,要判断是否是nullObject
if (!checkObject.isNullObject()) {
object.accumulate(jsonKey, transferJsonKey((JSONObject) valueObject, transferMode));
} else {
object.accumulate(jsonKey, null);
}
} else if (valueObject.getClass().toString().endsWith(JSONARRAY_KEY)) {
object.accumulate(jsonKey, transferJsonArray(jsonObject.getJSONArray(jsonKey), transferMode));
}
}
return object;
}
/**
* JSONArray key大小写转换
*
* @Description
* @Date 2019-3-7下午3:28:30
* @param jsonArray
* @param transferMode
* @return
* @throws
*/
public static JSONArray transferJsonArray(JSONArray jsonArray, boolean transferMode) {
JSONArray array = new JSONArray();
if (null != jsonArray && jsonArray.size() > 0) {
for (Object object : jsonArray) {
if (object.getClass().toString().endsWith(JSONOBJECT_KEY)) {
array.add(transferJsonKey((JSONObject) object, transferMode));
} else if (object.getClass().toString().endsWith(JSONARRAY_KEY)) {
array.add(transferJsonArray((JSONArray) object, transferMode));
}
}
}
return array;
}
public static void main(String[] args) {
String str = "{\"contextDTO\":{\"appPackAccToken\":null,\"cAllChainId\":\"\",\"callCount\":0,\"currentCallId\":\"0\",\"employeeId\":\"00000000-0000-0000-0000-000000000000\",\"id\":null,\"latitude\":null,\"loginCurrentCulture\":0,\"loginDepartment\":\"00000000-0000-0000-0000-000000000000\",\"loginDepartmentName\":null,\"loginIP\":null,\"loginOrg\":\"00000000-0000-0000-0000-000000000000\",\"loginTenantId\":\"00000000-0000-0000-0000-000000000000\",\"loginTenantName\":null,\",\"loginUserCode\":\"dddddd\",\"loginUserID\":\"79694a50-ea5f-4d66-99ef-bc7661cc2477\",\"loginUserName\":\"测试\",\"longitude\":null,\"sessionID\":\"97571283-6eed-4fd5-9d7c-6c60dbd362c9\"},\"statusCode\":null}";
JSONObject object = JSONObject.fromObject(str);
object = transferJsonKey(object, true);
System.out.println(object.toString());
}
}