Skip to content

Commit

Permalink
add json2cdo defautType
Browse files Browse the repository at this point in the history
  • Loading branch information
KenelLiu committed Mar 8, 2019
1 parent 7108b5c commit b25c398
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 27 deletions.
79 changes: 53 additions & 26 deletions CDOLib/src/main/java/com/cdoframework/cdolib/util/JsonUtil.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.cdoframework.cdolib.util;

import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList;

import java.util.Iterator;
Expand Down Expand Up @@ -39,7 +40,7 @@ public class JsonUtil {
final static String Class_Date="DATE";
final static String Class_DateTime="DATETIME";
final static String Class_File="FILE";

final static String Class_CDO="CDO";
/**
* json中 value 数据类型 都转换成String,将json转换成CDO
*
Expand All @@ -49,21 +50,31 @@ public class JsonUtil {
* @throws Exception
*/
public static CDO json2CDO(String strJSON) throws JSONException{
return json2CDO(strJSON, JSON2CDO_String,null);
return json2CDO(strJSON, JSON2CDO_String,null,null);
}
/**
* 将 json字符串 转换成CDO对象 *
* @param strJSON json字符串
* @param cls 定义 了strJSON中 key作为变量,key变量的类型为 key对应的value值实际数据类型。
* @param cls 定义 了strJSON中 key为变量,key对应的value值实际数据类型。
* 如 : strJSON={"key1":"value1","key2":20} 则 定义的class中 存在 int key2,String key1 变量,
* 则 strJSON 转换key1成CDO 中string 对象,转换key2成CDO 中int 对象数据
* @return
* @throws JSONException
*/
public static CDO json2CDO(String strJSON,Class<?> cls) throws JSONException{
return json2CDO(strJSON,JSON2CDO_Class,cls);
return json2CDO(strJSON,JSON2CDO_Class,cls,null);
}
/**
*
* @param strJSON json字符串
* @param cls 定义 了strJSON中 key对应值的 转换类型
* @param defaultType
* @return
* @throws JSONException
*/
public static CDO json2CDO(String strJSON,Class<?> cls,String defaultType) throws JSONException{
return json2CDO(strJSON,JSON2CDO_Class,cls,defaultType);
}

/**
*
* @param strJSON
Expand All @@ -72,15 +83,15 @@ public static CDO json2CDO(String strJSON,Class<?> cls) throws JSONException{
* @return
* @throws JSONException
*/
private static CDO json2CDO(String strJSON,byte json2CDOType,Class<?> cls) throws JSONException {
private static CDO json2CDO(String strJSON,byte json2CDOType,Class<?> cls,String defaultType) throws JSONException {
if(strJSON==null)
return null;
if(!strJSON.startsWith("{") && !strJSON.startsWith("\r{") && !strJSON.startsWith("\r\n{")){
throw new JSONException(strJSON+" is not jsonObject");
}
CDO cdoRequest = new CDO();
JSONObject jsonObj = String2Json(strJSON); // 转换成jsonObjects
setCDOFromJson(jsonObj, cdoRequest,json2CDOType,cls);
setCDOFromJson(jsonObj, cdoRequest,json2CDOType,cls,defaultType);
return cdoRequest;
}

Expand Down Expand Up @@ -168,7 +179,7 @@ private static JSONObject String2Json(String strJSON) throws JSONException {
*
* @throws JSONException
*/
private static void setCDOFromJson(JSONObject jsonObj,CDO cdoRequest,byte json2CDOType,Class<?> cls) throws JSONException {
private static void setCDOFromJson(JSONObject jsonObj,CDO cdoRequest,byte json2CDOType,Class<?> cls,String defaultType) throws JSONException {
try {
String key = "";
Object obj = null;
Expand All @@ -179,18 +190,18 @@ private static void setCDOFromJson(JSONObject jsonObj,CDO cdoRequest,byte json2C
if (obj instanceof JSONObject) {
subCDO = new CDO();
cdoRequest.setCDOValue(key, subCDO);
setCDOFromJson((JSONObject) obj, subCDO,json2CDOType,cls);
setCDOFromJson((JSONObject) obj, subCDO,json2CDOType,cls,defaultType);
} else if (obj instanceof JSONArray) {
//数组 里的数据 1为普通数据类型,2 json对象类型,3 不支持数组嵌套数组 ,混合数据
JSONArray jsonArr=(JSONArray) obj;
if(jsonArr.length()==0){
setEmptyArray(cdoRequest, key, json2CDOType, cls);
return;
setEmptyArray(cdoRequest, key, json2CDOType, cls,defaultType);
continue;
}
setCDOListFromJson((JSONArray) obj,cdoRequest,key,json2CDOType,cls);
setCDOListFromJson((JSONArray) obj,cdoRequest,key,json2CDOType,cls,defaultType);
} else {
//设置普通数据类型
setCommonField(cdoRequest, key, obj, json2CDOType, cls);
setCommonField(cdoRequest, key, obj, json2CDOType, cls,defaultType);
}
}
} catch (Exception e) {
Expand All @@ -199,7 +210,7 @@ private static void setCDOFromJson(JSONObject jsonObj,CDO cdoRequest,byte json2C
}


private static void setCDOListFromJson(JSONArray jsonObj,CDO cdoParent,String key,byte json2CDOType,Class<?> cls) throws Exception {
private static void setCDOListFromJson(JSONArray jsonObj,CDO cdoParent,String key,byte json2CDOType,Class<?> cls,String defaultType) throws Exception {
Object obj = null;
List<String> commonList=null;
List<CDO> cdoList=null;
Expand All @@ -212,7 +223,7 @@ private static void setCDOListFromJson(JSONArray jsonObj,CDO cdoParent,String ke
}
CDO subCDO = new CDO();
cdoList.add(subCDO);
setCDOFromJson((JSONObject) obj, subCDO,json2CDOType,cls);
setCDOFromJson((JSONObject) obj, subCDO,json2CDOType,cls,defaultType);
} else if (obj instanceof JSONArray) {
throw new JSONException("unsupport json Array nesting, [[]] is unsupported");
} else {
Expand All @@ -223,18 +234,18 @@ private static void setCDOListFromJson(JSONArray jsonObj,CDO cdoParent,String ke
}
//设置普通类型数组
if(commonList!=null){
setCommonArray(cdoParent, key,commonList, json2CDOType, cls);
setCommonArray(cdoParent, key,commonList, json2CDOType, cls,defaultType);
}

}

private static void setCommonField(CDO cdoRequest,String key,Object values,byte json2CDOType,Class<?> cls) throws JSONException{
private static void setCommonField(CDO cdoRequest,String key,Object values,byte json2CDOType,Class<?> cls,String defaultType) throws JSONException{
try{
switch (json2CDOType) {
case JSON2CDO_Class:
{
String type=cls.getDeclaredField(key).getType().getSimpleName().toUpperCase();
type=type.indexOf("[")>0?type.substring(0,type.indexOf("[")):type;

String type=getClassType(cls, key, defaultType);
switch(type){
case Class_Byte:
cdoRequest.setByteValue(key,Utility.parseByteValue(values));
Expand Down Expand Up @@ -278,6 +289,7 @@ private static void setCommonField(CDO cdoRequest,String key,Object values,byte
default:
throw new JSONException("unsupported json to cdo type,Json Key=["+key+"] Json value["+values+"] cast to "+cls.getDeclaredField(key).getType().getName());
}

}
break;
case JSON2CDO_String:
Expand All @@ -291,13 +303,12 @@ private static void setCommonField(CDO cdoRequest,String key,Object values,byte
}

}
private static void setEmptyArray(CDO cdoRequest,String key,byte json2CDOType,Class<?> cls) throws JSONException{
private static void setEmptyArray(CDO cdoRequest,String key,byte json2CDOType,Class<?> cls,String defaultType) throws JSONException{
try{
switch (json2CDOType) {
case JSON2CDO_Class:
{
String type=cls.getDeclaredField(key).getType().getSimpleName().toUpperCase();
type=type.indexOf("[")>0?type.substring(0,type.indexOf("[")):type;
String type=getClassType(cls, key, defaultType);
switch(type){
case Class_Byte:
cdoRequest.setByteArrayValue(key, new byte[0]);
Expand Down Expand Up @@ -335,6 +346,9 @@ private static void setEmptyArray(CDO cdoRequest,String key,byte json2CDOType,Cl
case Class_DateTime:
cdoRequest.setDateTimeArrayValue(key, new String[0]);
break;
case Class_CDO:
cdoRequest.setCDOArrayValue(key, new CDO[0]);
break;
default:
throw new JSONException("unsupported json to cdo type="+cls.getDeclaredField(key).getType().getName());
}
Expand All @@ -358,14 +372,13 @@ private static void setEmptyArray(CDO cdoRequest,String key,byte json2CDOType,Cl
* @param cls
* @throws JSONException
*/
private static void setCommonArray(CDO cdoRequest,String key,List<String> commonList,byte json2CDOType,Class<?> cls) throws JSONException{
private static void setCommonArray(CDO cdoRequest,String key,List<String> commonList,byte json2CDOType,Class<?> cls,String defaultType) throws JSONException{
String[] values=commonList.toArray(new String[commonList.size()]);
try{
switch (json2CDOType) {
case JSON2CDO_Class:
{
String type=cls.getDeclaredField(key).getType().getSimpleName().toUpperCase();
type=type.indexOf("[")>0?type.substring(0,type.indexOf("[")):type;
{
String type=getClassType(cls, key, defaultType);
switch(type){
case Class_Byte:
cdoRequest.setByteArrayValue(key,Utility.parseByteArrayValue(values));
Expand Down Expand Up @@ -418,4 +431,18 @@ private static void setCommonArray(CDO cdoRequest,String key,List<String> common
throw new JSONException(ex);
}
}

private static String getClassType(Class<?> cls,String key,String defaultType) throws Exception{
String type="";
try{
type=cls.getDeclaredField(key).getType().getSimpleName().toUpperCase();
type=type.indexOf("[")>0?type.substring(0,type.indexOf("[")):type;
}catch(Exception e){
if(defaultType==null)
throw e;
else
type=defaultType;
}
return type;
}
}
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<repository>
<id>liantong.repository.release</id>
<name>liantong Maven Release Repository</name>
<url>http://10.27.122.241:8081/nexus/content/repositories/releases/</url>
<url>http://127.0.0.1:8081/repository/maven-releases</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
Expand Down

0 comments on commit b25c398

Please sign in to comment.