代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
java to json
作者:
云香水识
/ 发布于
2012/11/19
/
642
java代码完成用于 规范化 toJSON 字符串
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; @SuppressWarnings("rawtypes") public class JsonUtil { /** 增加需要额外处理的对象toString */ public Map<Class,JsonCastable> jsonCast = new HashMap<Class, JsonCastable>(); /** * 根据参数类型 路由 获取 返回值字符串 * @param o 待操作参数可以是 String:将直接进行特殊字符的replace; Number或者boolean:直接输出; 否则调用toJson * @return {String} json字符串 */ @SuppressWarnings("unchecked") public String toJson(Object o){ if(null == o){ return null; }else if(jsonCast.containsKey(o.getClass())){ return toJson( jsonCast.get(o.getClass()).cast(o) ); }else if(o instanceof String){ return "\"" + ((String)o).replaceAll("\"", "\\\\\"").replaceAll("[\n\r]", "\\\\n").replaceAll("[\\s]+", " ") + "\""; // ① 双引号 replaceTo \" ; ②换行 replaceTo \n; ③多个空白 replaceTo 1个 }else if(o instanceof Number || o instanceof Boolean){ return o.toString(); }else if( o instanceof Iterable ){ return listToJson((Iterable<Object>) o); }else if( o instanceof Object[] ){ return arrayToJson((Object[]) o); }else if( o instanceof Map){ return mapToJson((Map<Object, Object>) o); }else{ return ( o instanceof NeedToJson ) ? toJson(toMap(o)) : toJson(o.toString()); // NeedToJson 用来标示 在递归展开的时候需要展现的对象 } } /** * 处理Map型数据 * @param m * @return */ private String mapToJson(Map<Object,Object> m){ StringBuffer sb = new StringBuffer(); sb.append("{"); for (Map.Entry<Object, Object> e : m.entrySet()) { String key = e.getKey().toString().replaceAll("[\\W]", ""); if(key.length()>0 && key.charAt(0)>='0' && key.charAt(0) <= '9'){ throw new RuntimeException("json-key不要以数字开头"); } sb.append("\"" + key + "\":"); sb.append(toJson(e.getValue())); sb.append(","); } if( sb.lastIndexOf(",") == sb.length()-1 ){ sb.deleteCharAt(sb.length()-1); } sb.append("}"); return sb.toString(); } /** * 处理集合型数据 * @param list * @return */ private String listToJson(Iterable<Object> list){ StringBuffer sb = new StringBuffer(); sb.append("["); for (Object o : list) { sb.append( toJson(o) ); sb.append(","); } if( sb.lastIndexOf(",") == sb.length()-1 ){ sb.deleteCharAt(sb.length()-1); } sb.append("]"); return sb.toString(); } /** * 处理数组型数据 * @param list * @return */ private String arrayToJson(Object[] list){ StringBuffer sb = new StringBuffer(); sb.append("["); for (Object o : list) { sb.append( toJson(o) ); sb.append(","); } if( sb.lastIndexOf(",") == sb.length()-1 ){ sb.deleteCharAt(sb.length()-1); } sb.append("]"); return sb.toString(); } /** * 对象转换为 Map 根据field的get方法 * @param o 不得为null * @return */ public Map<String, Object> toMap(Object o){ Map<String, Object> map = new HashMap<String, Object>(); Class<?> clazz = o.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { String s = field.getName(); Class<?> c = field.getType(); String methodName = ( Boolean.TYPE.equals(c) ? "is" : "get") +s.substring(0,1).toUpperCase()+s.substring(1); try { Method method = clazz.getMethod(methodName); Object result = method.invoke(o); map.put(s,result); } catch (Exception e) { } } return map; } /** * 仅用作标记是否对普通java对象根据field的get方法toMap 然后再 toJSON */ public interface NeedToJson{} /** 增加需要额外处理的对象toString */ public interface JsonCastable<T>{ String cast(T o); } } /****************************************************华丽丽的分界线*************************************************************/ public class Person implements JsonUtil.NeedToJson{ private String name = "shy2850"; private Integer age = 1002002939; private Date birth = new Date(); private Boolean male = false; private Person[] friends; private double amt = 017827038920843099384920934892d; private byte b = 24; private char c = 'n'; private BigDecimal bd = new BigDecimal(142424232353.83838d); /**getFuns**/ } public class Test { public static void main(String[] args) { JsonUtil util = new JsonUtil(); util.jsonCast.put(Date.class, new JsonCastable<Date>() { public String cast(Date o) { return null == o ? null : new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(o); } }); Person person = new Person(); String result = util.toJson(person); System.out.println(result); } }
试试其它关键字
java
to
json
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
云香水识
贡献的其它代码
(
1
)
.
java to json
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3