Json工具类使用Word文档格式.docx

上传人:b****4 文档编号:18216722 上传时间:2022-12-14 格式:DOCX 页数:7 大小:17.15KB
下载 相关 举报
Json工具类使用Word文档格式.docx_第1页
第1页 / 共7页
Json工具类使用Word文档格式.docx_第2页
第2页 / 共7页
Json工具类使用Word文档格式.docx_第3页
第3页 / 共7页
Json工具类使用Word文档格式.docx_第4页
第4页 / 共7页
Json工具类使用Word文档格式.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

Json工具类使用Word文档格式.docx

《Json工具类使用Word文档格式.docx》由会员分享,可在线阅读,更多相关《Json工具类使用Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。

Json工具类使用Word文档格式.docx

publicJSONUtil(){}

/**

*代理类时做的检查.返回应该检查的对象.

*@parambean

*@return

*/

protectedObjectproxyCheck(Objectbean){

returnbean;

}

staticpublicStringtoJSONString(Objectobj)throwsJSONException{

returntoJSONString(obj,false);

staticpublicStringtoJSONString(Objectobj,booleanuseClassConvert)throwsJSONException{

if(instance==null)

instance=newJSONUtil();

returninstance.getJSONObject(obj,useClassConvert).toString();

privateStringgetJSONArray(ObjectarrayObj,booleanuseClassConvert)throwsJSONException{

if(arrayObj==null)

return"

null"

;

arrayObj=proxyCheck(arrayObj);

JSONArrayjSONArray=newJSONArray();

if(arrayObjinstanceofCollection){

Iteratoriterator=((Collection)arrayObj).iterator();

while(iterator.hasNext()){

ObjectrowObj=iterator.next();

if(rowObj==null)

jSONArray.put(newJSONStringObject(null));

elseif(rowObj.getClass().isArray()||rowObjinstanceofCollection)

jSONArray.put(getJSONArray(rowObj,useClassConvert));

else

jSONArray.put(getJSONObject(rowObj,useClassConvert));

if(arrayObj.getClass().isArray()){

intarrayLength=Array.getLength(arrayObj);

for(inti=0;

i<

arrayLength;

i++){

ObjectrowObj=Array.get(arrayObj,i);

returnjSONArray.toString();

JSONStringObjectgetJSONObject(Objectvalue,booleanuseClassConvert)throwsJSONException{

//处理原始类型

if(value==null){

returnnewJSONStringObject("

);

value=proxyCheck(value);

if(valueinstanceofJSONString){

Objecto;

try{

o=((JSONString)value).toJSONString();

}catch(Exceptione){

thrownewJSONException(e);

thrownewJSONException("

BadvaluefromtoJSONString:

"

+o);

if(valueinstanceofNumber){

returnnewJSONStringObject(JSONObject.numberToString((Number)value));

if(valueinstanceofBoolean||valueinstanceofJSONObject||

valueinstanceofJSONArray){

returnnewJSONStringObject(value.toString());

if(valueinstanceofString)

returnnewJSONStringObject(JSONObject.quote(value.toString()));

if(valueinstanceofMap){

JSONObjectjSONObject=newJSONObject();

Iteratoriterator=((Map)value).keySet().iterator();

Stringkey=iterator.next().toString();

ObjectvalueObj=((Map)value).get(key);

jSONObject.put(key,getJSONObject(valueObj,useClassConvert));

returnnewJSONStringObject(jSONObject.toString());

//class

if(valueinstanceofClass)

returnnewJSONStringObject(JSONObject.quote(((Class)value).getSimpleName()));

//数组

if(valueinstanceofCollection||value.getClass().isArray()){

returnnewJSONStringObject(getJSONArray(proxyCheck(value),useClassConvert));

returnreflectObject(value,useClassConvert);

}//value.equals(null)

privateJSONStringObjectreflectObject(Objectbean,booleanuseClassConvert){

Classklass=bean.getClass();

Method[]methods=klass.getMethods();

for(inti=0;

methods.length;

i+=1){

Methodmethod=methods[i];

Stringname=method.getName();

Stringkey="

"

if(name.startsWith("

get"

)){

key=name.substring(3);

}elseif(name.startsWith("

is"

key=name.substring

(2);

if(key.length()>

0&

&

Character.isUpperCase(key.charAt(0))&

method.getParameterTypes().length==0){

if(key.length()==1){

key=key.toLowerCase();

}elseif(!

Character.isUpperCase(key.charAt

(1))){

key=key.substring(0,1).toLowerCase()+

key.substring

(1);

ObjectelementObj=method.invoke(bean,null);

if(!

useClassConvert&

elementObjinstanceofClass)

continue;

jSONObject.put(key,getJSONObject(elementObj,useClassConvert));

/*forgetaboutit*/

}

publicclassJSONStringObjectimplementsJSONString{

privateStringjsonString=null;

publicJSONStringObject(StringjsonString){

this.jsonString=jsonString;

@Override

publicStringtoString(){

returnjsonString;

publicStringtoJSONString(){

调用测试程序

importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.List;

publicclassAObj{

privateintii=7;

privatebooleanbb=true;

privateStringss="

你好"

privateListaList=newArrayList();

publicAObj(){

aList.add("

hello"

aList.add(false);

aList.add(newBObj());

aList.add(newHashMap());

publicbooleanisBb(){

returnbb;

publicvoidsetBb(booleanbb){

this.bb=bb;

publicintgetIi(){

returnii;

publicvoidsetIi(intii){

this.ii=ii;

publicStringgetSs(){

returnss;

publicvoidsetSs(Stringss){

this.ss=ss;

publicListgetAList(){

returnaList;

publicvoidsetAList(Listlist){

aList=list;

importjava.math.BigDecimal;

publicclassBObj{

privateHashMapinnerhm=newHashMap();

publicBObj(){

doubledd=7.4354;

innerhm.put("

gigi"

"

高兴"

sina"

newBigDecimal(dd));

publicHashMapgetInnerhm(){

returninnerhm;

publicvoidsetInnerhm(HashMapinnerhm){

this.innerhm=innerhm;

publicclassCObjextendsAObj{

privateObject[]oarray=newObject[]{352,false,"

kick"

};

publicObject[]getOarray(){

returnoarray;

publicvoidsetOarray(Object[]oarray){

this.oarray=oarray;

importjava.util.*;

importcom.aherp.framework.util.HiJSONUtil;

importcom.aherp.framework.util.JSONUtil;

publicclassTest{ 

publicstaticvoidmain(String[]args)throwsJSONException{

CObjcObj=newCObj();

System.out.println("

varjsonStr="

+JSONObject.quote(JSONUtil.toJSONString(cObj))+"

输出:

{\"

AList\"

:

[\"

hello\"

false,{\"

innerhm\"

gigi\"

\"

高兴\"

\"

sina\"

7.4353999999999995651478457148186862468719482421875}},{}],\"

ii\"

7,\"

oarray\"

[352,false,\"

kick\"

],\"

ss\"

你好\"

bb\"

true}"

如果需要支持Hibernate,那么必须弄清其机制。

Hibernate采用CGLIB对VO对象进行字节码增加,实际机制就是使用一个原类型的proxy子类,其子类实现了HibernateProxy接口。

其接口有一个isUninitialized的判断方法,用来判断该代理类是否已经初始化(还记得在事务外使用延迟加载的对象会抛noSession的错误吗,正是由于实际使用的对象已经变成原来类的子类proxy了)。

而对于one-to-many映射时,很难判断对象只加载一次,因此为了避免递归调用死循环,忽略了Hibernate的one-to-many集合的递归反射。

其原理和many-to-one一样,也是一个子类化的proxy,具有PersistentSet的接口。

因此,支持Hibernate的JSONUtil如下:

importorg.hibernate.collection.PersistentSet;

importorg.hibernate.proxy.HibernateProxy;

importorg.hibernate.proxy.LazyInitializer;

*支持Hibernate的JSONUtil.

*自动检测是否已经代理加载,如果未加载,则将对象仅加载为OID

publicclassHiJSONUtilextendsJSONUtil{

privatestaticHiJSONUtilinstance=null;

staticpublicStringtoJSONString(Objectobj)throwsJSONException{

staticpublicStringtoJSONString(Objectobj,booleanuseClassConvert)throwsJSONException{

instance=newHiJSONUtil();

protectedObjectproxyCheck(Objectbean){

Sys

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1