- 浏览: 1336083 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
写道
/**
* JSON 构造器类,可以将Java对象映射为JSON对象
* @author yyl
* @datetime
* @version
*/
public class JsonBuilder {
//排除的字段
private Set<String> excludeFields = new HashSet<String>();
private static final Object EMPTY_OBJECT_ARRAY[] = new Object[;
public JsonBuilder() {
excludeFields.add("class");
excludeFields.add("declaringClass");
excludeFields.add("metaClass");
}
/**
* 转换成JSON时需要排除的字段
* @param excludes
*/
public void setExcludeFields(String... excludes) {
for (String exclude : excludes) {
excludeFields.add(exclude);
}
}
/**
* 将Java对象转化为JSON对象
* @param obj java对象
* @return js对象
*/
public String encode(Object object) {
return encodeBasic(object);
}
/**
* 将Java对象转化为JSON对象
* @param obj java对象
* @return js对象
*/
private String encodeBasic(Object object) {
// basic
if (object == null) {
return encodeNULL();
} else if (object instanceof String) {
return encodeString((String) object);
} else if (object instanceof Boolean) {
return encodeBoolean((Boolean) object);
} else if (object instanceof Number) {
return encodeNumber((Number) object);
} else if (object instanceof Map) {
return encodeMap((Map) object);
} else if (object instanceof Iterable) {
return encodeIterable((Iterable) object);
} else if (object instanceof Object[]) {// object.getClass().isArray()
return encodeArray((Object[]) object);
} else if (object instanceof java.util.Date) {
return encodeDate((java.util.Date) object);
} else {
Class clazz = object.getClass();
if (clazz.isInterface()) {
return encodeEmpty();
}
if (clazz.isEnum()) {
return encodeEnum((java.lang.Enum) object);
} else {
return encodeAdapter(object);
}
}
}
/**
* 返回一个NULL对象
* @return javascript null对象
*/
private String encodeNULL() {
return "null";
}
/**
* 将Java-String对象转化为JSON对象
* @param string 字符串对象
* @return javascript string对象
*/
private String encodeString(String string) {
StringBuilder sbr = new StringBuilder(string.length() * ;
sbr.append("'");
for (int i = sz = string.length(); i < sz; i++) {
char ch = string.charAt(i);
// handle unicode
if (ch > fff) {
sbr.append("\\u");
sbr.append(hex(ch));
} else if (ch > ff) {
sbr.append("\\u);
sbr.append(hex(ch));
} else if (ch > ) {
sbr.append("\\u);
sbr.append(hex(ch));
} else if (ch < {
switch (ch) {
case '\b':
sbr.append('\\');
sbr.append('b');
break;
case '\n':
sbr.append('\\');
sbr.append('n');
break;
case '\t':
sbr.append('\\');
sbr.append('t');
break;
case '\f':
sbr.append('\\');
sbr.append('f');
break;
case '\r':
sbr.append('\\');
sbr.append('r');
break;
default:
if (ch > f) {
sbr.append("\\u);
sbr.append(hex(ch));
} else {
sbr.append("\\u);
sbr.append(hex(ch));
}
break;
}
} else {
// line.
switch (ch) {
case '\'':
sbr.append('\\');
sbr.append('\'');
break;
case '"':
sbr.append('\\');
sbr.append('"');
break;
case '\\':
sbr.append('\\');
sbr.append('\\');
break;
default:
sbr.append(ch);
break;
}
}
}
sbr.append("'");
return sbr.toString();
}
private String hex(char ch) {
return Integer.toHexString(ch).toUpperCase(Locale.ENGLISH);
}
/**
* 将Java-Boolean对象转化为JSON对象
* @param obj 字符串对象
* @return javascript Boolean对象
*/
private String encodeBoolean(Boolean b) {
return b.toString();
}
/**
* 将Java-Number对象转化为JSON对象
* @param n 数字对象
* @return javascript Number对象
*/
private String encodeNumber(Number n) {
return n.toString();
}
/**
* 将Java-Map对象转化为JSON对象
*
* @param map Map对象
* @return javascript Map对象(简单对象)
*/
private String encodeMap(Map map) {
StringBuilder sbr = new StringBuilder();
sbr.append("{");
boolean isFirst = true;
for (java.util.Iterator it = map.entrySet().iterator(); it.hasNext();) {
if (isFirst) {
isFirst = false;
} else {
sbr.append(",");
}
Map.Entry entry = (Map.Entry) it.next();
sbr.append(encodeBasic(entry.getKey())).append(":").append(encodeBasic(entry.getValue()));
}
sbr.append("}");
return sbr.toString();
}
/**
* 将Java-Iterable对象转化为JSON对象
* @param iterable Iterable对象
* @return javascript Array对象
*/
private String encodeIterable(java.lang.Iterable iterable) {
StringBuilder sbr = new StringBuilder();
sbr.append("[");
int index =
for (java.util.Iterator it = iterable.iterator(); it.hasNext();) {
if ((index++) > {
sbr.append(",");
}
sbr.append(encodeBasic(it.next()));
}
sbr.append("]");
return sbr.toString();
}
/**
* 将Java-数组对象转化为JSON对象
* @param obj 数组对象
* @return javascript Array对象
*/
private String encodeArray(Object[] array) {
StringBuilder sbr = new StringBuilder();
sbr.append("[");
for (int index = index < array.length; index++) {
if (index > {
sbr.append(",");
}
Object o = array[index];
sbr.append(encodeBasic(o));
}
sbr.append("]");
return sbr.toString();
}
/**
* 将Java-Date对象转化为JSON对象
* @param date 日期对象
* @return javascript Date对象
*/
private String encodeDate(java.util.Date date) {
return new StringBuilder().append("new Date(").append(date.getTime()).append(")").toString();
}
/**
* 将Java-Enum对象转化为JSON对象
* @param e 枚举对象
* @return javascript Date对象
*/
private String encodeEnum(java.lang.Enum e) {
return "'" + e.name() + "'";
}
/**
* 返回一个JSON简单对象
* @return javascript 简单对象
*/
private String encodeEmpty() {
return "{}";
}
/**
* 将Java对象转化为JSON对象
* @param object Java对象
* @return 如果适配器能解析,则返回解析后的JSON对象,否则返回一个默认Empty JSON对象
*/
private String encodeAdapter(Object object) {
try {
Map<String, Object> proxy = new HashMap<String, Object>();
Class clazz = object.getClass();
if (clazz == null) {
throw new IllegalArgumentException("No bean class specified");
}
proxy.put("class", clazz.getName());
PropertyDescriptor[] descriptors = null;
try {
descriptors = Introspector.getBeanInfo(clazz).getPropertyDescriptors();
} catch (IntrospectionException e) {
descriptors = new PropertyDescriptor[;
}
for (int i = j = descriptors.length; i < j; i++) {
PropertyDescriptor descriptor = descriptors[i];
String key = descriptor.getName();
//排除的字段
if (excludeFields.contains(key)) {
continue;
}
Method method = descriptor.getReadMethod();
if (descriptor.getReadMethod() != null) {
Class<?> type = descriptor.getPropertyType();
if (type.isEnum()) {
continue;
}
Object value = method.invoke(object, EMPTY_OBJECT_ARRAY);
proxy.put(key, value);
}
}
return encodeMap(proxy);
} catch (Exception ex) {
return encodeEmpty();
}
}
}
* JSON 构造器类,可以将Java对象映射为JSON对象
* @author yyl
* @datetime
* @version
*/
public class JsonBuilder {
//排除的字段
private Set<String> excludeFields = new HashSet<String>();
private static final Object EMPTY_OBJECT_ARRAY[] = new Object[;
public JsonBuilder() {
excludeFields.add("class");
excludeFields.add("declaringClass");
excludeFields.add("metaClass");
}
/**
* 转换成JSON时需要排除的字段
* @param excludes
*/
public void setExcludeFields(String... excludes) {
for (String exclude : excludes) {
excludeFields.add(exclude);
}
}
/**
* 将Java对象转化为JSON对象
* @param obj java对象
* @return js对象
*/
public String encode(Object object) {
return encodeBasic(object);
}
/**
* 将Java对象转化为JSON对象
* @param obj java对象
* @return js对象
*/
private String encodeBasic(Object object) {
// basic
if (object == null) {
return encodeNULL();
} else if (object instanceof String) {
return encodeString((String) object);
} else if (object instanceof Boolean) {
return encodeBoolean((Boolean) object);
} else if (object instanceof Number) {
return encodeNumber((Number) object);
} else if (object instanceof Map) {
return encodeMap((Map) object);
} else if (object instanceof Iterable) {
return encodeIterable((Iterable) object);
} else if (object instanceof Object[]) {// object.getClass().isArray()
return encodeArray((Object[]) object);
} else if (object instanceof java.util.Date) {
return encodeDate((java.util.Date) object);
} else {
Class clazz = object.getClass();
if (clazz.isInterface()) {
return encodeEmpty();
}
if (clazz.isEnum()) {
return encodeEnum((java.lang.Enum) object);
} else {
return encodeAdapter(object);
}
}
}
/**
* 返回一个NULL对象
* @return javascript null对象
*/
private String encodeNULL() {
return "null";
}
/**
* 将Java-String对象转化为JSON对象
* @param string 字符串对象
* @return javascript string对象
*/
private String encodeString(String string) {
StringBuilder sbr = new StringBuilder(string.length() * ;
sbr.append("'");
for (int i = sz = string.length(); i < sz; i++) {
char ch = string.charAt(i);
// handle unicode
if (ch > fff) {
sbr.append("\\u");
sbr.append(hex(ch));
} else if (ch > ff) {
sbr.append("\\u);
sbr.append(hex(ch));
} else if (ch > ) {
sbr.append("\\u);
sbr.append(hex(ch));
} else if (ch < {
switch (ch) {
case '\b':
sbr.append('\\');
sbr.append('b');
break;
case '\n':
sbr.append('\\');
sbr.append('n');
break;
case '\t':
sbr.append('\\');
sbr.append('t');
break;
case '\f':
sbr.append('\\');
sbr.append('f');
break;
case '\r':
sbr.append('\\');
sbr.append('r');
break;
default:
if (ch > f) {
sbr.append("\\u);
sbr.append(hex(ch));
} else {
sbr.append("\\u);
sbr.append(hex(ch));
}
break;
}
} else {
// line.
switch (ch) {
case '\'':
sbr.append('\\');
sbr.append('\'');
break;
case '"':
sbr.append('\\');
sbr.append('"');
break;
case '\\':
sbr.append('\\');
sbr.append('\\');
break;
default:
sbr.append(ch);
break;
}
}
}
sbr.append("'");
return sbr.toString();
}
private String hex(char ch) {
return Integer.toHexString(ch).toUpperCase(Locale.ENGLISH);
}
/**
* 将Java-Boolean对象转化为JSON对象
* @param obj 字符串对象
* @return javascript Boolean对象
*/
private String encodeBoolean(Boolean b) {
return b.toString();
}
/**
* 将Java-Number对象转化为JSON对象
* @param n 数字对象
* @return javascript Number对象
*/
private String encodeNumber(Number n) {
return n.toString();
}
/**
* 将Java-Map对象转化为JSON对象
*
* @param map Map对象
* @return javascript Map对象(简单对象)
*/
private String encodeMap(Map map) {
StringBuilder sbr = new StringBuilder();
sbr.append("{");
boolean isFirst = true;
for (java.util.Iterator it = map.entrySet().iterator(); it.hasNext();) {
if (isFirst) {
isFirst = false;
} else {
sbr.append(",");
}
Map.Entry entry = (Map.Entry) it.next();
sbr.append(encodeBasic(entry.getKey())).append(":").append(encodeBasic(entry.getValue()));
}
sbr.append("}");
return sbr.toString();
}
/**
* 将Java-Iterable对象转化为JSON对象
* @param iterable Iterable对象
* @return javascript Array对象
*/
private String encodeIterable(java.lang.Iterable iterable) {
StringBuilder sbr = new StringBuilder();
sbr.append("[");
int index =
for (java.util.Iterator it = iterable.iterator(); it.hasNext();) {
if ((index++) > {
sbr.append(",");
}
sbr.append(encodeBasic(it.next()));
}
sbr.append("]");
return sbr.toString();
}
/**
* 将Java-数组对象转化为JSON对象
* @param obj 数组对象
* @return javascript Array对象
*/
private String encodeArray(Object[] array) {
StringBuilder sbr = new StringBuilder();
sbr.append("[");
for (int index = index < array.length; index++) {
if (index > {
sbr.append(",");
}
Object o = array[index];
sbr.append(encodeBasic(o));
}
sbr.append("]");
return sbr.toString();
}
/**
* 将Java-Date对象转化为JSON对象
* @param date 日期对象
* @return javascript Date对象
*/
private String encodeDate(java.util.Date date) {
return new StringBuilder().append("new Date(").append(date.getTime()).append(")").toString();
}
/**
* 将Java-Enum对象转化为JSON对象
* @param e 枚举对象
* @return javascript Date对象
*/
private String encodeEnum(java.lang.Enum e) {
return "'" + e.name() + "'";
}
/**
* 返回一个JSON简单对象
* @return javascript 简单对象
*/
private String encodeEmpty() {
return "{}";
}
/**
* 将Java对象转化为JSON对象
* @param object Java对象
* @return 如果适配器能解析,则返回解析后的JSON对象,否则返回一个默认Empty JSON对象
*/
private String encodeAdapter(Object object) {
try {
Map<String, Object> proxy = new HashMap<String, Object>();
Class clazz = object.getClass();
if (clazz == null) {
throw new IllegalArgumentException("No bean class specified");
}
proxy.put("class", clazz.getName());
PropertyDescriptor[] descriptors = null;
try {
descriptors = Introspector.getBeanInfo(clazz).getPropertyDescriptors();
} catch (IntrospectionException e) {
descriptors = new PropertyDescriptor[;
}
for (int i = j = descriptors.length; i < j; i++) {
PropertyDescriptor descriptor = descriptors[i];
String key = descriptor.getName();
//排除的字段
if (excludeFields.contains(key)) {
continue;
}
Method method = descriptor.getReadMethod();
if (descriptor.getReadMethod() != null) {
Class<?> type = descriptor.getPropertyType();
if (type.isEnum()) {
continue;
}
Object value = method.invoke(object, EMPTY_OBJECT_ARRAY);
proxy.put(key, value);
}
}
return encodeMap(proxy);
} catch (Exception ex) {
return encodeEmpty();
}
}
}
发表评论
-
乱七八糟
2011-06-03 17:59 1263你这样做看看:第一步:在v$sqlarea 这视图 ... -
国内外DNS服务器地址列表
2011-04-13 14:20 1470DNS(Domain Name System)是域名解析服务 ... -
J2EE集群原理
2010-12-08 17:36 1170http://blog.csdn.net/wangchengs ... -
HTTP协议状态码的含义
2010-12-05 20:52 1338HTTP协议状态码的含义 ... -
maven环境变量设置
2010-11-15 12:34 10834maven环境变量设置 wondows 一、下载 ... -
memcached demo 应用例子
2010-11-15 12:31 1986Memcached 是一个高性能的分布式内存对象缓存系统 ... -
HTTP 的特性
2010-11-10 11:26 107311.3.1. 用户代理 (User-Age ... -
大型高性能网站的十项规则
2010-11-10 11:25 1102大型高性能网站的十项规则 -
正则表达式入门
2010-10-26 21:40 1186核心提示:正则表达 ... -
Java中使用正则表达式
2010-10-14 16:03 1764最近要在项目中做HTML解 ... -
正则表达式
2010-10-13 13:15 966正则表达式用于字符串 ... -
intellij idea教程
2010-09-05 23:16 24187intellij idea教程 首先我要说一点,在Intel ... -
json 转化
2010-07-17 12:27 1418package com.ijo.demo; public c ... -
电话秘密
2010-05-01 14:40 2192极少人知道的手机的几大隐密功能 1、当不喜欢别人打搅自己的时 ... -
json 无规律数据转换
2010-04-26 23:39 1408写道 public static void main(Str ... -
大道至简 Java 23种模式一点就通
2010-03-24 16:15 1104一、创建型模式 ... -
back
2010-03-16 14:18 1271http://jquery-api-zh-cn.googlec ...
相关推荐
例如,将Java对象转换为JSON字符串: ```java ObjectMapper mapper = new ObjectMapper(); String jsonString = mapper.writeValueAsString(yourObject); ``` 反向转换,将JSON字符串解析为Java对象: ```...
本篇文章将深入探讨如何将JSON字符串转换为C++类对象,以实现数据的有效操作和管理。 首先,我们需要一个库来解析JSON字符串。在C++中,有许多流行的JSON库可供选择,例如nlohmann/json、jsoncpp、RapidJSON等。...
Gson库提供了`Gson`类,它是核心转换器,可以通过调用其`toJson()`方法将Java对象转换成JSON字符串。例如,如果你有一个简单的Java类: ```java public class User { private String name; private int age; //...
5. **配置对象映射器**:`ObjectMapper`有许多可配置的选项,如忽略空值、处理循环引用等,可以根据实际需求进行设置。 在实际项目中,Jackson库还提供了许多其他特性,如XML支持、流式API等。掌握Jackson的基本...
它可以将Java对象转换为JSON字符串,反之亦然。Gson的强大之处在于它能自动映射Java类到JSON,无需编写大量转换代码。 1. 将Java对象转换为JSON: ```java import com.google.gson.Gson; public class User { ...
Gson是Google开发的一个用于在Java对象和JSON数据之间进行映射的Java库,它可以将任何Java对象转换为JSON字符串,反之亦然。以下是使用Gson进行List到JSON转换的基本步骤: 1. 引入Gson库:在build.gradle文件中...
例如,你可以通过`Gson().toJson()`方法将一个Java对象转换成JSON,同时使用`Gson().fromJson()`将JSON字符串还原为Java对象。 2. **类型安全**:Gson支持类型安全的转换,避免了类型转换异常。它可以根据对象的...
Google开发的Gson库,可以将Java对象转换为JSON字符串,反之亦然。Gson通过注解提供了一种简单的方法来自定义序列化和反序列化。 3. **org.json**: 这是一个轻量级的库,提供了简单的API来创建和解析JSON。例如...
2. JSON对象到Java对象:使用`ObjectMapper`类的`readValue()`方法将JSON字符串转换为Java对象。 3. Java对象到JSON对象:使用`ObjectMapper`的`writeValueAsString()`方法将Java对象转换为JSON字符串。 4. 解析JSON...
例如,你可以使用`ObjectMapper`类将一个Java对象转换为JSON字符串: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) throws ...
在Java开发中,处理JSON数据是一项常见的任务,而Gson和JsonBean是两个常用的库,用于将Java对象转换为JSON格式以及将JSON字符串反序列化为Java对象。本篇文章将详细探讨这两个库的使用方法,并通过一个具体的案例来...
在标签“xml bean”中,“bean”是Java中的术语,指的是符合JavaBeans规范的类,通常代表一个对象的属性、构造器和方法。在Java中,XML Bean通常是指使用Java Architecture for XML Binding (JAXB) 技术将XML数据...
1. JSON数组:在Java中,可以使用List或Array等集合类型映射JSON数组。 2. JSON对象嵌套:JavaBean的属性可以是其他JavaBean实例,这样可以处理JSON对象的嵌套结构。 3. JSON null值:JavaBean的属性可以是null,这...
然后,可以使用`ObjectMapper`类将Java对象转换为JSON字符串: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) throws Exception { ...
例如,可以使用`JSONObject`类的`toString()`方法将Java对象转换为JSON格式。同样,`JSONArray`也有类似的转换功能。 4. **反序列化** 反序列化是将JSON字符串转换回Java对象的过程。Apache JSON库提供了`...
例如,如果你有一个Java对象,你可以使用`ObjectMapper`类将对象转换为JSON字符串: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class MyObject { private String field1; private ...
1. **定义Java服务类**:被调用的Java类需要继承`JsonRpcObject`或实现`IjsonRpcObject`接口,并提供一个无参的构造函数。例如: ```java package test.rpc; import jcore.jsonrpc.common.JsonRpcObject; ...
- **Gson**:Google开发,将Java对象直接转换为JSON字符串,反之亦然,使用简单。 - **org.json**:提供JSONObject和JSONArray类,API直观,适合简单的JSON操作。 - **Fastjson**:阿里巴巴出品,速度非常快,适合大...
在Java开发中,经常需要将JSON字符串转换为Java Bean对象,反之亦然,以便于数据的序列化和反序列化。这篇博客(虽然链接无法在此提供)可能探讨了这个过程以及相关的工具和源码实现。 JSON是一种轻量级的数据交换...
2. User类:与JSON对象对应的Java类,使用`@JsonProperty`注解映射JSON字段。 ```java public class User { @JsonProperty("name") private String name; @JsonProperty("age") private int age; // 构造器、...