`
307622798
  • 浏览: 10638 次
社区版块
存档分类
最新评论

json

    博客分类:
  • Ajax
阅读更多
在Ajax中当使用服务器传递数据时,有三种方式:自定义数据格式,xml格式,json格式。
自定义格式在数据比较少时使用起来比较方便,xml格式的话我本人是比较推崇的,因为只需要传一个xml流到客户端,客户端可以直接将xml流生成一个DOM对象,JS处理dom对象也比较简单明了。而json格式的数据在JS处理时非常方便,代码看上去也简单易懂,唯一不好的是在服务器端拼接json格式时非常繁琐,要非常细心,否则就很容易出错。所以我就想是不是写一个方法让它帮我自动生成json字符串。而我只需要将数据传过去就可以得到一个字符串。


下面这个类的CreateByReflect()方法,只要你传一个List集合过去,和一个名字,它就会给你生成一个{"JsonName",[{},{}]}格式的字符串
public class CreateJSON {

public String createByReflect(List<?> obj, String JsonName) {
StringBuffer strBuff = new StringBuffer();
// 如果传过来的数据长度为0则表示没有数据传过来,直接返回一个{"JsonName":[]}
if (obj.size() == 0)
return "{\"" + JsonName + "\":[]}";
// 否则开始构建字符串
strBuff.append("{\"" + JsonName + "\":[");
for (int i = 0; i < obj.size(); i++) {
strBuff.append(createJson(obj.get(i)));
strBuff.append(",");
}
strBuff.deleteCharAt(strBuff.length() - 1);
strBuff.append("]}");

return strBuff.toString();
}

// 根据给定的实体类对象创建JSON对象
private String createJson(Object obj) {

StringBuffer strBuff = new StringBuffer();
strBuff.append("{");
// 得到该对象的类
Class<?> vo = obj.getClass();
// 得到该对象的所有的字段
Field[] fields = vo.getDeclaredFields();
String methodName = null;
String fieldName = null;
for (int i = 0; i < fields.length; i++) {
// 得到字段名
fieldName = fields[i].getName();
// 得到该字段的数据类型
Class<?> fieldType = fields[i].getType();
// 得到该字段的get方法的方法名
methodName = "get" + fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
Method method = null;
Object fieldValue = null;
try {
method = vo.getMethod(methodName, new Class[] {});
fieldValue = method.invoke(obj);
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}

// 将字段名加到字符串中去
strBuff.append("\"");
strBuff.append(fieldName);
strBuff.append("\":");
// 判断该字段的数据类型是不是Object类型,是对象类型的话,还得创建该对象的数据,即递归调用本方法
if (!fieldType.isPrimitive() && fieldType != String.class
&& fieldType != Integer.class && fieldType != Float.class
&& fieldType != Double.class && fieldType != Long.class
&& fieldType != Byte.class && fieldType != Short.class
&& fieldType != Boolean.class
&& fieldType != Character.class) {
if(fieldValue == null) {
strBuff.append("{}");
}else {
strBuff.append(this.createJson(fieldValue));
}
}
else {
strBuff.append("\"");
strBuff.append(fieldValue.toString());
strBuff.append("\"");
}
strBuff.append(",");
}
strBuff.deleteCharAt(strBuff.length() - 1);
strBuff.append("}");
return strBuff.toString();
}

}
分享到:
评论

相关推荐

    最好用的c++json库 nlohmann json源代码

    最好用的c++json库 nlohmann json源代码最好用的c++json库 nlohmann json源代码最好用的c++json库 nlohmann json源代码最好用的c++json库 nlohmann json源代码最好用的c++json库 nlohmann json源代码最好用的c++json...

    pb通过http协议传json.zip

    pb通过http协议传json; pb通过http协议传json; pb通过http协议传json; pb通过http协议传json; pb通过http协议传json; pb通过http协议传json; pb通过http协议传json; pb通过http协议传json; pb通过http协议传json; pb...

    C# JSON 编码解码

    //Program.cs 里是一些比较极端的测试,实际使用时只需复制 JSON.cs 到项目里。 //比如类Vec2: public class Vec2 { public float x; public float y; } //编码范例: Vec2 v1 = new Vec2(); v1.x = 1.23f; v1....

    json2toml:将JSON转换为TOML

    json2toml 将JSON转换为 。例子var json2toml = require ( 'json2toml' ) ;json2toml ( { simple : true } ) ;// =&gt; 'simple = true\n'// Also supports pretty-printing optionsjson2toml ( { deeply : { option : ...

    C#.Net2.0解析Json,精简版的Newtonsoft.Json.dll,JsonReader,JsonSerializer(Json.Net)

    基于Newtonsoft.Json精简的。.Net2.0的哦 仅保留了读取和解析json数据的相关类和方法(JsonReader,JsonSerializer),去除了写入json数据以及json和xml互相转换的部分以及其他不常用的类。 编译后dll仅20kb 也可以直接...

    mysql 解析json字符串

    mysql解析Json字符串插件 安装方法 1、拷贝lib_mysqludf_json_parsing.dll到mysql目录C:\Program Files\MariaDB 5.5\lib\plugin下 2、在数据库中执行 DROP FUNCTION json_get; CREATE FUNCTION json_get RETURNS ...

    电视源json电视源json电视源json电视源json

    电视源json

    中国全国城市列表JSON数据2022最新

    中国城市列表JSON数据,中国所有城市,中国省市列表 2022最新json数据,2022年8月9日更新,因为最近需要用到中国省市列表的JSON数据 本来想把县也包含进去的,但是数量太多了~ 中国总共有23个省、5个自治区、4个直辖...

    全国省市区县街道json格式数据信息

    全国省市区县街道json: 文件含义 文件名称 省份数据 provinces.json 城市数据 cities.json 区县数据 areas.json 乡镇(街道)数据 streets.json “省份、城市” 二级联动数据 pc.json “省份、城市” 二级联动数据...

    json paser 属于idea插件 用于解析json

    json paser 属于idea插件 用于解析json json paser 属于idea插件 用于解析json json paser 属于idea插件 用于解析json json paser 属于idea插件 用于解析json json paser 属于idea插件 用于解析json json paser 属于...

    Vue加载json文件的方法简单示例

    本文实例讲述了Vue加载json文件的方法。分享给大家供大家参考,具体如下: 一、在build/dev-server.js文件里 var app = express() 这句代码后面添加如下(旧版): var appData = require('../address.json'); // ...

    Newtonsoft.Json.dll 程序文件

    json对象格式转化,最新版本 Newtonsoft.Json.dll 欢迎大家使用。不需要任何分

    android解析通过http返回的json数据 包括服务器json数据

    1. 例子代码有两部分:androidJson是andoird的工程,inxdex.php是php服务器json数据产生部分代码。 2. 服务器端提供http(get)获取方式获取json数据的api例子,是用php写的。 4. android的apk给你说完成http数据...

    MFC使用json11解析JSON

    MFC使用JSON11将json,包括json字符串转对象,对象转json字符串

    全国省市区县街道json

    全国省市区县街道json: 文件含义 文件名称 省份数据 provinces.json 城市数据 cities.json 区县数据 areas.json 乡镇(街道)数据 streets.json “省份、城市” 二级联动数据 pc.json “省份、城市” 二级联动数据...

    2020年全国省市区县街道四级联动json编码.zip

    2020年全国省市区县街道四级联动json编码 真实可靠 文件含义 文件名称 省份数据 provinces.json 城市数据 cities.json 区县数据 areas.json 乡镇(街道)数据 streets.json ...

    Json离线格式化工具

    在开发中,如果用到Json传递或者存储数据,Newtonsoft.Json序列化后的内容很难阅读,Json格式化(树状结构)工具由此诞生。压缩包中包含一个美化工具(exe)、C# net 3.5的格式化dll和一个简单的demo文件(exe工具...

    json3.js 【JS / JavaScript 中解析JSON的js包,JSON官方的JSON解析包】

    json3.js 【JS / JavaScript 中解析JSON的js包,JSON官方的JSON解析包】。JavaScript中解析JSON的js包,页面中引入json3.js,即可使用。 使用方法:JSON.parse(str), JSON.stringify(obj) 更多详情请参考博文: ...

    i3-json-2010.rar_JSON_LabVIEW JSON_i3 json_labview与json_labview解

    json与labview常见相互转化,能解决大多json问题

    【精】JSON需要的所有jar包

    这里是json开发需要的所有jar包文件哦~还有精心的json封装方法提示和最新jar包下载地址~现在拿出来分享啦!希望对大家有帮助! (1)json-lib最新版本可以从这个地方下载:...

Global site tag (gtag.js) - Google Analytics