`

JSON 构造器类,可以将Java对象映射为JSON对象

阅读更多
写道
/**
* 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();
}
}
}

 

分享到:
评论

相关推荐

    java 对象与json字符串互相转换工具类

    例如,将Java对象转换为JSON字符串: ```java ObjectMapper mapper = new ObjectMapper(); String jsonString = mapper.writeValueAsString(yourObject); ``` 反向转换,将JSON字符串解析为Java对象: ```...

    json字符串转换c++类对象

    本篇文章将深入探讨如何将JSON字符串转换为C++类对象,以实现数据的有效操作和管理。 首先,我们需要一个库来解析JSON字符串。在C++中,有许多流行的JSON库可供选择,例如nlohmann/json、jsoncpp、RapidJSON等。...

    Gson读取java对象

    Gson库提供了`Gson`类,它是核心转换器,可以通过调用其`toJson()`方法将Java对象转换成JSON字符串。例如,如果你有一个简单的Java类: ```java public class User { private String name; private int age; //...

    使用jackson完成json与Java对象互转

    5. **配置对象映射器**:`ObjectMapper`有许多可配置的选项,如忽略空值、处理循环引用等,可以根据实际需求进行设置。 在实际项目中,Jackson库还提供了许多其他特性,如XML支持、流式API等。掌握Jackson的基本...

    java json相关jar包

    它可以将Java对象转换为JSON字符串,反之亦然。Gson的强大之处在于它能自动映射Java类到JSON,无需编写大量转换代码。 1. 将Java对象转换为JSON: ```java import com.google.gson.Gson; public class User { ...

    Android list转json工具类

    Gson是Google开发的一个用于在Java对象和JSON数据之间进行映射的Java库,它可以将任何Java对象转换为JSON字符串,反之亦然。以下是使用Gson进行List到JSON转换的基本步骤: 1. 引入Gson库:在build.gradle文件中...

    gson 2.7 用于转换Java对象和Json对象

    例如,你可以通过`Gson().toJson()`方法将一个Java对象转换成JSON,同时使用`Gson().fromJson()`将JSON字符串还原为Java对象。 2. **类型安全**:Gson支持类型安全的转换,避免了类型转换异常。它可以根据对象的...

    java创建 解析json lib包

    Google开发的Gson库,可以将Java对象转换为JSON字符串,反之亦然。Gson通过注解提供了一种简单的方法来自定义序列化和反序列化。 3. **org.json**: 这是一个轻量级的库,提供了简单的API来创建和解析JSON。例如...

    Java环境JSON包

    2. JSON对象到Java对象:使用`ObjectMapper`类的`readValue()`方法将JSON字符串转换为Java对象。 3. Java对象到JSON对象:使用`ObjectMapper`的`writeValueAsString()`方法将Java对象转换为JSON字符串。 4. 解析JSON...

    Java json包

    例如,你可以使用`ObjectMapper`类将一个Java对象转换为JSON字符串: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) throws ...

    gson和jsonBean解析json案例

    在Java开发中,处理JSON数据是一项常见的任务,而Gson和JsonBean是两个常用的库,用于将Java对象转换为JSON格式以及将JSON字符串反序列化为Java对象。本篇文章将详细探讨这两个库的使用方法,并通过一个具体的案例来...

    xmljson生成实体类

    在标签“xml bean”中,“bean”是Java中的术语,指的是符合JavaBeans规范的类,通常代表一个对象的属性、构造器和方法。在Java中,XML Bean通常是指使用Java Architecture for XML Binding (JAXB) 技术将XML数据...

    JSON入门Java篇-5-用JavaBean来构建JSON.rar

    1. JSON数组:在Java中,可以使用List或Array等集合类型映射JSON数组。 2. JSON对象嵌套:JavaBean的属性可以是其他JavaBean实例,这样可以处理JSON对象的嵌套结构。 3. JSON null值:JavaBean的属性可以是null,这...

    java转json的jar包

    然后,可以使用`ObjectMapper`类将Java对象转换为JSON字符串: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) throws Exception { ...

    apache json解析开源项目

    例如,可以使用`JSONObject`类的`toString()`方法将Java对象转换为JSON格式。同样,`JSONArray`也有类似的转换功能。 4. **反序列化** 反序列化是将JSON字符串转换回Java对象的过程。Apache JSON库提供了`...

    json需要的jar

    例如,如果你有一个Java对象,你可以使用`ObjectMapper`类将对象转换为JSON字符串: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class MyObject { private String field1; private ...

    Json-RPC for java中文手册

    1. **定义Java服务类**:被调用的Java类需要继承`JsonRpcObject`或实现`IjsonRpcObject`接口,并提供一个无参的构造函数。例如: ```java package test.rpc; import jcore.jsonrpc.common.JsonRpcObject; ...

    java 解析 生成 json

    - **Gson**:Google开发,将Java对象直接转换为JSON字符串,反之亦然,使用简单。 - **org.json**:提供JSONObject和JSONArray类,API直观,适合简单的JSON操作。 - **Fastjson**:阿里巴巴出品,速度非常快,适合大...

    json和bean转换

    在Java开发中,经常需要将JSON字符串转换为Java Bean对象,反之亦然,以便于数据的序列化和反序列化。这篇博客(虽然链接无法在此提供)可能探讨了这个过程以及相关的工具和源码实现。 JSON是一种轻量级的数据交换...

    SpringMVC-9 处理JSON数据

    2. User类:与JSON对象对应的Java类,使用`@JsonProperty`注解映射JSON字段。 ```java public class User { @JsonProperty("name") private String name; @JsonProperty("age") private int age; // 构造器、...

Global site tag (gtag.js) - Google Analytics